2009-01-14 59 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