Probieren Sie eine große CouchDB Datenbank für die lokale Entwicklung, lange Sicht vermieden baut

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

  •  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?

War es hilfreich?

Lösung

Die Antwort wird Replikation gefiltert. Ich mag diese in zwei Teile tun:

  1. Replizieren der Produktionsdatenbank, example_db auf meinem lokalen Server als example_db_full
  2. Führen gefilterte Replikation von example_db_full zu example_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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top