Domanda

Ho circa 15k righe in MSSQL 2005 che voglio migrare in CouchDB, dove una riga è un documento. Ho un CLR-UDF che scrive n righe in un file XML associato allo schema. Ho una trasformazione XSL che converte l'XML associato allo schema in JSON.

Con questi strumenti esistenti sto pensando di poter passare da MSSQL a XML a JSON. Se eseguo il batch di n righe per file JSON, posso eseguire lo script cURL per scorrere i file e inviarli a CouchDB utilizzando l'API di massa _bulk_docs .

Funzionerà? Qualcuno ha mai fatto una migrazione come questa prima? Puoi consigliarmi un modo migliore?

È stato utile?

Soluzione

Finora ho fatto alcune conversioni da database SQL legacy a CouchDB. Ho sempre avuto un approccio un po 'diverso.

  1. Ho usato la chiave primaria di SQL-DB come ID documento. Ciò mi ha permesso di importare più e più volte senza timore di documenti duplicati.
  2. Ho effettuato importazioni riga per riga anziché un'importazione in blocco. Semplifica il debug. Ho visto tra 5-10 inserti al secondo su una connessione Internet. Anche se questo non è un lampo, è stato abbastanza veloce per me. Il mio più grande database è di 600.000 documenti per un totale di 20 GB. riga per riga gonfiare il database durante l'importazione, quindi eseguire la compattazione occasionalmente. Poi di nuovo a meno che le tue file non siano enormi 15.000 righe non suona molto.

Il mio codice di importazione di solito è simile al seguente:

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 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top