在批量加载CouchDB时遇到问题

时间:2009-01-14 19:43:01

标签: sql-server xml json xslt couchdb

我在MSSQL 2005中有大约15k行,我想迁移到CouchDB,其中一行是一个文档。我有一个CLR-UDF将 n 行写入模式绑定的XML文件。我有一个XSL转换,它将模式绑定的XML转换为JSON。

使用这些现有工具,我认为我可以将MSSQL转换为XML转换为JSON。如果我为每个JSON文件批量 n 行,我可以编写脚本cURL来循环遍历文件并使用批量API _bulk_docs将它们发布到CouchDB。

这会有用吗?以前有人做过这样的迁移吗?你能推荐一种更好的方法吗?

1 个答案:

答案 0 :(得分:6)

到目前为止,我做了一些从遗留SQL数据库到CouchDB的转换。我总是有一个不同的方法。

  1. 我使用SQL-DB的主键作为Document-Id。这让我可以反复导入而不用担心会出现重复文件。
  2. 我进行了逐行导入,而不是批量导入。它使调试更容易。我通过Internet连接看到每秒5-10次插入。虽然这不是闪电般快,但它对我来说足够快。我最大的数据库是600.000份文件,共20GB。在导入期间逐行膨胀数据库,因此偶尔会运行压缩。然后再次,除非你的行很大.15000行听起来不多。
  3. 我的导入代码通常如下所示:

    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