2009-01-14 21 views
8

MSSQL 2005'te bir satırın bir belge olduğu CouchDB'ye geçmek istediğim ~ 15k satırlarım var. Ben şemaya bağlı bir XML dosyasına n satırları yazıyor bir CLR-UDF var. Şemaya bağlı XML'i JSON'a dönüştüren bir XSL dönüşümü var.Toplu yükleme yaparken yakalanan CouchDB

Bu mevcut araçlarla MSSQL'i XML'e XML'e taşıyabileceğimi düşünüyorum. JSON dosyası başına n n satırları topluyorsam, cURL dosyalarını dosyalar arasında dolaşmak ve toplu API _bulk_docs kullanarak CouchDB'ye POST için komut dosyası oluşturabilirim.

Bu işe yarar mı? Daha önce böyle bir göç yapmış mı? Daha iyi bir yol önerebilir misin?

cevap

6

Şu ana kadar eski SQL veritabanlarından CouchDB'ye bazı dönüşümler yaptım. Her zaman biraz farklı bir yaklaşım vardı.

  1. SQL-DB'nin birincil anahtarını Document-Id olarak kullandım. Bu, yinelenen belgelerden korkmadan tekrar tekrar içe aktarmamı sağladı.
  2. Toplu içe aktarma yerine sıralı satır içe aktarma yaptım. Hata ayıklamayı kolaylaştırır. İnternet bağlantısı üzerinden saniyede 5-10 ek arasında gördüm. Bu hızlı yıldırım olmasa da benim için yeterince hızlıydı. En büyük veritabanım 20GB toplam 600.000 Belgeler. Satır içi satır içe aktarma sırasında veritabanını şişirir, bu nedenle zaman zaman sıkıştırmayı çalıştırın. Sonra tekrar satırlarınız büyük değilse 15.000 satır çok fazla değil.

My ithal kodu genellikle şuna benzer:

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 
İlgili konular