سؤال

لقد حصلت على ~ 15k صفوف في MSSQL 2005 التي أريد الهجرة إلى CouchDB ، حيث صف واحد هو مستند واحد. لديّ clr-udf يكتب ن صفوف إلى ملف XML المرتبط بالمخطط. لدي تحويل XSL الذي يحول XML المرتبط بالمخطط إلى JSON.

مع هذه الأدوات الحالية ، أفكر في أنه يمكنني الذهاب إلى MSSQL إلى XML إلى JSON. إذا كنت دفعة ن صفوف لكل ملف JSON ، يمكنني البرنامج النصي للتخلي عن الملفات من خلال الملفات ونشرها إلى CouchDB باستخدام واجهة برمجة تطبيقات السائبة _bulk_docs.

هل سيعمل هذا؟ هل قام أي شخص بالهجرة مثل هذا من قبل؟ هل يمكنك أن تنصح طريقة أفضل؟

هل كانت مفيدة؟

المحلول

حتى الآن قمت ببعض التحويلات من قواعد بيانات SQL Legacy إلى CouchDB. كان لدي دائمًا نهج مختلف إلى حد ما.

  1. لقد استخدمت المفتاح الأساسي لـ SQL-DB كمعرف المستند. هذا سمح لي بالاستيراد مرارًا وتكرارًا دون خوف من المستندات المكررة.
  2. لقد قمت بالواردات من الصفوف بدلاً من الاستيراد بالجملة. يجعل تصحيح الأخطاء أسهل. رأيت ما بين 5-10 إدراج في الثانية على اتصال بالإنترنت. في حين أن هذا ليس سريعًا ، إلا أنه كان سريعًا بما يكفي بالنسبة لي. أكبر قاعدة البيانات الخاصة بي هي 600.000 مستندات يبلغ مجموعها 20 جيجابايت. row-phar-plug bloat قاعدة البيانات أثناء الاستيراد ، لذا قم بتشغيل الضغط من حين لآخر. ثم مرة أخرى ما لم تكن صفوفك ضخمة 15.000 صفوف لا تظهر كثيرًا.

عادة ما يبدو رمز الاستيراد الخاص بي مثل هذا:

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 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top