Probieren Sie eine große CouchDB Datenbank für die lokale Entwicklung, lange Sicht vermieden baut
-
25-09-2019 - |
Frage
ist CouchDB bequem (CouchApps) zu entwickeln, die lokal und schiebt dann in entlegene Produktion. Leider mit der Produktion großen Datensatz, kann mühsam sein, auf Ansichten arbeiten.
Was sind gute Möglichkeiten, Proben einer CouchDB Datenbank für die Verwendung in der lokalen Entwicklung zu nehmen?
Lösung
Die Antwort wird Replikation gefiltert. Ich mag diese in zwei Teile tun:
- Replizieren der Produktionsdatenbank,
example_db
auf meinem lokalen Server alsexample_db_full
- Führen gefilterte Replikation von
example_db_full
zuexample_db
, wo die Filter schneidet genügend Daten so schnell baut, sondern hält genügend Daten, so kann ich meinen Code Arbeiten bestätigen.
Welche Dokumente auswählen können anwendungsspezifisch sein. Zu dieser Zeit ist ich mit einem einfachen zufälligen Pass zufrieden / mit einem Prozentsatz fehlschlagen, dass ich angeben können. Die Zufälligkeit ist konsistent (das heißt, das gleiche Dokument immer passiert oder immer versagt.)
Meine Technik ist, den Inhalt Prüfsumme in dem Dokument _rev
Feld auf einem Bereich von [0,0, 1,0) zu normalisieren. Dann geben Sie ich einfach einen Bruchteil (z 0.01
), und wenn die normierte Prüfsumme Wert <= meine Fraktion, das Dokument geht.
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);
}