8

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

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

这行得通吗?以前有人做过这样的迁移吗?你能推荐一个更好的方法吗?

4

1 回答 1

6

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

  1. 我使用 SQL-DB 的主键作为 Document-Id。这使我可以一遍又一遍地导入,而不必担心重复文件。
  2. 我进行了逐行导入而不是批量导入。它使调试更容易。我在 Internet 连接上看到每秒 5-10 次插入。虽然这不是闪电般的速度,但对我来说已经足够快了。我最大的数据库是 600.000 个文档,总计 20GB。在导入期间逐行使数据库膨胀,因此偶尔运行压缩。再说一次,除非您的行很大,否则 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 
于 2009-01-19T22:16:20.547 回答