عينة من قاعدة بيانات CouchDB كبيرة للتطوير المحلي ، وتجنب بنيات العرض الطويل

StackOverflow https://stackoverflow.com/questions/3604158

  •  25-09-2019
  •  | 
  •  

سؤال

CouchDB مناسب لتطوير (CouchApps) محليًا ثم الضغط على الإنتاج عن بُعد. لسوء الحظ مع مجموعات البيانات بحجم الإنتاج ، يمكن أن يكون العمل على طرق العرض مرهقة.

ما هي الطرق الجيدة لأخذ عينات من قاعدة بيانات CouchDB للاستخدام في التطوير المحلي؟

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

المحلول

الجواب يتم ترشيحه. أحب أن أفعل هذا في جزأين:

  1. تكرار قاعدة بيانات الإنتاج ، example_db إلى خادمي المحلي كما example_db_full
  2. تنفيذ النسخ المتماثل المصفى من example_db_full ل example_db, ، حيث يقوم المرشح بقطع بيانات كافية بحيث تكون عمليات الإنشاء سريعة ، ولكنها تحتفظ بما يكفي من البيانات حتى أتمكن من تأكيد عمل الكود الخاص بي.

ما هي المستندات التي يجب تحديدها يمكن أن تكون خاصة بالتطبيق. في هذا الوقت ، أنا راضٍ عن تمريرة عشوائية بسيطة/تفشل بنسبة مئوية يمكنني تحديدها. العشوائية متسقة (أي أن نفس الوثيقة تمر دائمًا أو تفشل دائمًا.)

تقنيتي هي تطبيع فحص المحتوى في المستند _rev حقل على نطاق [0.0 ، 1.0). ثم أحدد ببساطة بعض الكسر (على سبيل المثال 0.01) ، وإذا كانت قيمة عمليات الفحص الطبيعية هي <= الكسر الخاص بي ، فإن المستند يمر.

function(doc, req) {
  if(/^_design\//.test(doc._id))
    return true;

  if(!req.query.p)
    throw {error: "Must supply a 'p' parameter with the fraction"
                  + " of documents to pass [0.0-1.0]"};

  var p = parseFloat(req.query.p);
  if(!(p >= 0.0 && p <= 1.0)) // Also catches NaN
    throw {error: "Must supply a 'p' parameter with the fraction of documents"
                  + " to pass [0.0-1.0]"};

  // Consider the first 8 characters of the doc checksum (for now, taken
  // from _rev) as a real number on the range [0.0, 1.0), i.e.
  // ["00000000", "ffffffff").
  var ONE = 4294967295; // parseInt("ffffffff", 16);
  var doc_val = parseInt(doc._rev.match(/^\d+-([0-9a-f]{8})/)[1], 16);

  return doc_val <= (ONE * p);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top