Esempio di un ampio database CouchDB per lo sviluppo locale, evitando vista lunga costruisce

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

  •  25-09-2019
  •  | 
  •  

Domanda

CouchDB è conveniente per lo sviluppo (CouchApps) a livello locale e poi spingere in produzione a distanza. Purtroppo con insiemi di dati di produzione dimensioni, lavorando sulle viste può essere ingombrante.

Quali sono buoni modi per prelevare campioni di un database CouchDB per l'uso in sviluppo locale?

È stato utile?

Soluzione

La risposta è filtrata replica. Mi piace farlo in due parti:

  1. replicare il database di produzione, example_db al mio server locale come example_db_full
  2. eseguire la replica filtrata da example_db_full a example_db, dove i tagli filtrare i dati sufficienti costruisce così sono veloci, ma mantiene abbastanza dati in modo da poter confermare i miei lavori di codice.

Quali documenti per selezionare può essere specifica dell'applicazione. In questo momento, sono soddisfatto con un semplice passaggio casuale / fail con una percentuale che posso specificare. La casualità è coerente (cioè, lo stesso documento passa sempre o fallisce sempre.)

La mia tecnica è di normalizzare il checksum contenuto nel campo _rev documento su una serie di [0.0, 1.0). Poi ho semplicemente specificare alcune frazioni (ad esempio 0.01), e se il valore di checksum normalizzato è <= mia frazione, il documento passa.

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top