2009-01-14 43 views
8

我在MSSQL 2005中有15k行,我想遷移到CouchDB,其中一行是一個文檔。我有一個CLR-UDF將n行寫入模式綁定的XML文件。我有一個將模式綁定的XML轉換爲JSON的XSL轉換。雖然批量加載時遇到問題CouchDB

有了這些現有的工具,我想我可以去MSSQL XML到JSON。如果我爲每個JSON文件批處理n行,我可以腳本cURL循環遍歷這些文件並使用批量API _bulk_docs將它們發佈到CouchDB。

這項工作?有沒有人做過這樣的遷移?你能推薦一個更好的方法嗎?

回答

6

到目前爲止,我做了一些從傳統SQL數據庫到CouchDB的轉換。我總是有一個不同的方法。

  1. 我用SQL-DB的主鍵作爲Document-Id。這使我可以一遍又一遍地導入,而不用擔心重複的文件。
  2. 我做了逐行導入而不是批量導入。它使調試更容易。我通過互聯網連接每秒鐘看到5-10次插入。雖然這不是閃電般的,但對我來說足夠快。我最大的數據庫是總共20GB的600.000份文件。在導入期間逐行膨脹數據庫,以便偶爾運行壓縮。然後再次,除非你的行很大15.000行聽起來不多。

我進口的代碼通常是這樣的:

def main(): 
options = parse_commandline() 
server = couchdb.client.Server(options.couch) 
db = server[options.db] 
for kdnnr in get_kundennumemrs(): 
    data = vars(get_kunde(kdnnr)) 
    doc = {'name1': data.get('name1', ''), 
      'strasse': data.get('strasse', ''), 
      'plz': data.get('plz', ''), 'ort': data.get('ort', ''), 
      'tel': data.get('tel', ''), 'kundennr': data.get('kundennr', '')} 

    # update existing doc or insert a new one 
    newdoc = db.get(kdnnr, {}) 
    newdoc.update(doc) 
    if newdoc != db.get(kdnnr, {}): 
     db[kdnnr] = newdoc