عينة من قاعدة بيانات CouchDB كبيرة للتطوير المحلي ، وتجنب بنيات العرض الطويل
-
25-09-2019 - |
سؤال
CouchDB مناسب لتطوير (CouchApps) محليًا ثم الضغط على الإنتاج عن بُعد. لسوء الحظ مع مجموعات البيانات بحجم الإنتاج ، يمكن أن يكون العمل على طرق العرض مرهقة.
ما هي الطرق الجيدة لأخذ عينات من قاعدة بيانات CouchDB للاستخدام في التطوير المحلي؟
المحلول
الجواب يتم ترشيحه. أحب أن أفعل هذا في جزأين:
- تكرار قاعدة بيانات الإنتاج ،
example_db
إلى خادمي المحلي كماexample_db_full
- تنفيذ النسخ المتماثل المصفى من
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);
}
لا تنتمي إلى StackOverflow