8

MSSQL 2005 には 15,000 行があり、1 行が 1 ドキュメントである CouchDB に移行したいと考えています。スキーマにバインドされた XML ファイルにn行を書き込む CLR-UDF があります。スキーマにバインドされた XML を JSON に変換する XSL 変換があります。

これらの既存のツールを使用して、MSSQL から XML から JSON に移行できると考えています。JSON ファイルごとにn行をバッチ処理すると、cURL をスクリプト化してファイルをループ処理し、bulk API を使用してそれらを CouchDB に POST できます_bulk_docs

これは機能しますか?以前にこのような移行を行った人はいますか? より良い方法をお勧めできますか?

4

1 に答える 1

6

ここまでで、レガシー SQL データベースから CouchDB への変換をいくつか行いました。私はいつも少し違うアプローチをしていました。

  1. SQL-DB の主キーを Document-Id として使用しました。これにより、ドキュメントの重複を恐れることなく、何度もインポートすることができました。
  2. 一括インポートではなく、行ごとのインポートを行いました。デバッグが容易になります。インターネット接続で 1 秒あたり 5 ~ 10 件の挿入が見られました。これは電光石火の速さではありませんが、私にとっては十分な速さでした。私の最大のデータベースは、合計 20 GB の 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 
于 2009-01-19T22:16:20.547 に答える