2009-01-14 17 views
8

Tengo ~ 15k filas en MSSQL 2005 que quiero migrar a CouchDB, donde una fila es un documento. Tengo un CLR-UDF que escribe n filas en un archivo XML con esquema. Tengo una transformación XSL que convierte el XML enlazado a esquema en JSON.Tiene una carga masiva CouchDB

Con estas herramientas existentes, creo que puedo ir de MSSQL a XML a JSON. Si lote n filas por archivo JSON, puedo escribir cURL para recorrer los archivos y POST a CouchDB usando la API _bulk_docs.

¿Funcionará? Alguien ha hecho una migración como esta antes? ¿Puedes recomendar una mejor manera?

Respuesta

6

Hasta ahora hice algunas conversiones de bases de datos SQL heredadas a CouchDB. Siempre tuve un enfoque algo diferente.

  1. Utilicé la clave primaria del SQL-DB como Document-Id. Esto me permitió importar una y otra vez sin temor a duplicar documentos.
  2. Hice importaciones fila por fila en lugar de una importación masiva. Hace que la depuración sea más fácil. Vi entre 5 y 10 inserciones por segundo a través de una conexión a Internet. Si bien esto no es muy rápido, fue lo suficientemente rápido para mí. Mi base de datos más grande es 600,000 documentos que suman 20GB. fila a fila hincha la base de datos durante la importación, de modo que ejecute la compactación ocasionalmente. Por otra parte, a menos que sus filas sean enormes, 15,000 filas no suenan demasiado.

Mi código de importación por lo general es el siguiente:

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