Pergunta

Eu tenho ~ 15k linhas no MSSQL 2005 que quero migrar para o CouchDB, onde uma linha é um documento. Eu tenho um clr-udf que escreve n Linhas para um arquivo XML ligado ao esquema. Eu tenho uma transformação XSL que converte o XML ligado ao esquema em JSON.

Com essas ferramentas existentes, acho que posso ir MSSQL para XML para JSON. Se eu lote n Linhas por arquivo JSON, eu posso script Curl para percorrer os arquivos e publicá -los no CouchDB usando a API em massa _bulk_docs.

Isso vai funcionar? Alguém já fez uma migração como essa antes? Você pode recomendar uma maneira melhor?

Foi útil?

Solução

Até agora, fiz algumas conversões de bancos de dados SQL Legacy para CouchDB. Eu sempre tive uma abordagem um pouco diferente.

  1. Eu usei a chave primária do SQL-DB como o documento-ID. Isso me permitiu importar repetidamente sem medo de documentos duplicados.
  2. Eu fiz importações em linha a fila em vez de uma importação em massa. Isso facilita a depuração. Vi entre 5 a 10 inserções por segundo em uma conexão com a Internet. Embora isso não seja um raio rápido, foi rápido o suficiente para mim. Meu maior banco de dados são 600.000 documentos, totalizando 20 GB. Room Bloat Bloat O banco de dados durante a importação, portanto, execute a compactação ocasionalmente. Por outro lado, a menos que suas linhas sejam enormes 15.000 linhas parecem muito.

Meu código de importação geralmente se parece com o seguinte:

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 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top