Frage

Ich habe ~ 15.000 Zeilen in MSSQL 2005, die ich in CouchDB migrieren möchte, wo eine Zeile ein Dokument ist. Ich habe einen CLR-udf, der schreibt n Zeilen zu einer schema gebundenen XML-Datei. Ich habe eine XSL-Transformation, die das schema gebundene XML in JSON umwandelt.

Mit diesen vorhandenen Tools denke ich, dass ich MSSQL nach XML nach JSON gehen kann. Wenn ich batch n Zeilen pro JSON -Datei, ich kann skript cresce crted, um die Dateien durchzuschlitzen und sie mit der Bulk -API in CouchDB zu veröffentlichen _bulk_docs.

Ob das funktioniert? Hat jemand schon eine solche Migration gemacht? Können Sie einen besseren Weg empfehlen?

War es hilfreich?

Lösung

Bisher habe ich einige Konvertierungen von Legacy SQL -Datenbanken zu Couchdb durchgeführt. Ich hatte immer einen etwas anderen Ansatz.

  1. Ich habe den Primärschlüssel des SQL-DB als Dokument-ID verwendet. Dies ermöglichte es mir, immer und immer wieder zu importieren, ohne Angst vor doppelten Dokumenten zu haben.
  2. Ich habe in Reihen-für-Reihen-Importe anstelle eines Bulk-Imports. Es erleichtert das Debuggen. Ich habe zwischen 5 und 10 Einsätzen pro Sekunde über eine Internetverbindung gesehen. Während dies nicht schnell ist, war es für mich schnell genug. Meine größte Datenbank sind 600.000 Dokumente mit insgesamt 20 GB. Zeilen-für-Reihen-Aufblähen der Datenbank während des Imports, also führen Sie die Verdichtung gelegentlich aus. Andererseits, es sei denn, Ihre Zeilen sind riesige 15.000 Zeilen nicht viel.

Mein Importcode sieht normalerweise so aus:

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 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top