CouchDBの一括読み込み中の落とし穴
-
22-07-2019 - |
質問
MSSQL 2005には、CouchDBに移行したい行が15,000行あります。1行は1ドキュメントです。スキーマバインドXMLファイルに n 行を書き込むCLR-UDFがあります。スキーマにバインドされたXMLをJSONに変換するXSL変換があります。
これらの既存のツールを使用して、MSSQLからXMLからJSONに移行できると考えています。 JSONファイルごとに n 行をバッチ処理する場合、cURLのスクリプトを作成してファイルをループし、バルクAPI _bulk_docs
を使用してCouchDBにPOSTできます。
これは機能しますか?これまでに誰かがこのような移行を行ったことがありますか?より良い方法をお勧めしますか?
解決
これまで、レガシーSQLデータベースからCouchDBへの変換をいくつか行いました。私はいつも多少異なるアプローチをしていました。
- SQL-DBの主キーをDocument-Idとして使用しました。これにより、ドキュメントの重複を恐れずに何度もインポートできました。
- 一括インポートではなく、行ごとのインポートを行いました。デバッグが簡単になります。インターネット接続で毎秒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
所属していません StackOverflow