Pruebe una gran base de datos CouchDB para el desarrollo local, evitando la visión a largo plazo se basa

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

  •  25-09-2019
  •  | 
  •  

Pregunta

CouchDB es conveniente desarrollar (CouchApps) a nivel local y a continuación, empuje en producción a distancia. Por desgracia, con los conjuntos de datos de producción de tamaño, trabajando en vistas puede ser engorroso.

¿Cuáles son buenas maneras de tomar muestras de una base de datos CouchDB para su uso en el desarrollo local?

¿Fue útil?

Solución

La respuesta se filtra replicación. Me gusta hacer esto en dos partes:

  1. Replicar la base de datos de producción, example_db a mi servidor local como example_db_full
  2. realizar la replicación filtrada desde example_db_full a example_db, donde los cortes filtrar los datos suficientes por lo que construye son rápidos, pero mantiene los datos suficientes para que pueda confirmar mi código funciona.

¿Qué documentos para seleccionar puede ser de aplicación específica. En este momento, estoy satisfecho con un pase simple al azar / no pasa con un porcentaje que puedo especificar. La aleatoriedad es consistente (es decir, el mismo documento siempre pasa o falla siempre.)

Mi técnica es normalizar la suma de comprobación contenido en el campo _rev documento en un rango de [0,0, 1,0). Después, simplemente especifico alguna fracción (por ejemplo 0.01), y si el valor de suma de control normalizado es <= mi fracción, el documento Pases.

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top