Question

J'ai environ 15 000 lignes dans MSSQL 2005 que je souhaite migrer vers CouchDB, où une ligne correspond à un document. J'ai un CLR-UDF qui écrit des n lignes dans un fichier XML lié au schéma. J'ai une transformation XSL qui convertit le XML lié au schéma en JSON.

Avec ces outils existants, je pense pouvoir passer de MSSQL à XML en JSON. Si je lot n lignes par fichier JSON, je peux utiliser un script cURL pour effectuer une boucle sur les fichiers et les envoyer à CouchDB à l'aide de l'API en bloc _bulk_docs .

Cela fonctionnera-t-il? Quelqu'un a-t-il déjà effectué une telle migration? Pouvez-vous recommander un meilleur moyen?

Était-ce utile?

La solution

Jusqu'à présent, j'ai effectué certaines conversions de bases de données SQL héritées vers CouchDB. J'ai toujours eu une approche quelque peu différente.

  1. J'ai utilisé la clé primaire de la base de données SQL comme document-id. Cela m'a permis d'importer encore et encore sans craindre les documents en double.
  2. J'ai effectué des importations ligne par ligne au lieu d'une importation en bloc. Cela facilite le débogage. J'ai vu entre 5 et 10 inserts par seconde sur une connexion Internet. Bien que ce ne soit pas rapide comme l'éclair, c'était assez rapide pour moi. Ma plus grande base de données est 600.000 documents totalisant 20 Go. ligne par ligne gonfle la base de données lors de l'importation afin d'exécuter le compactage de temps en temps. Là encore, à moins que vos rangées soient énormes, 15 000 rangées ne semblent pas beaucoup.

Mon code d'importation ressemble généralement à ceci:

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 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top