2

CouchDB は、ローカルで開発 (CouchApps) してから、リモート プロダクションにプッシュするのに便利です。残念ながら、本番サイズのデータ​​ セットでは、ビューでの作業は面倒な場合があります。

ローカル開発で使用する CouchDB データベースのサンプルを取得する良い方法は何ですか?

4

1 に答える 1

2

その答えは、フィルタリングされたレプリケーションです。私はこれを2つの部分で行うのが好きです:

  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);
}
于 2010-08-30T21:02:41.207 に答える