Образец большого CouchDB базы данных для локального развития, избегая длительного представления

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

  •  25-09-2019
  •  | 
  •  

Вопрос

CouchDB удобен для разработки (CouchApps) локально, а затем нажимает на удаленное производство. К сожалению, с наборами данных размером производства, работа на представлениях может быть громоздким.

Каковы хорошие способы взять образцы базы данных CouchDB для использования в местном развитии?

Это было полезно?

Решение

Ответ отфильтрован репликацией. Мне нравится делать это в двух частях:

  1. Реплицируйте производственную базу данных, example_db на мой локальный сервер как example_db_full
  2. Выполнить фильтрованную репликацию от 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top