CouchDB は、ローカルで開発 (CouchApps) してから、リモート プロダクションにプッシュするのに便利です。残念ながら、本番サイズのデータ セットでは、ビューでの作業は面倒な場合があります。
ローカル開発で使用する CouchDB データベースのサンプルを取得する良い方法は何ですか?
CouchDB は、ローカルで開発 (CouchApps) してから、リモート プロダクションにプッシュするのに便利です。残念ながら、本番サイズのデータ セットでは、ビューでの作業は面倒な場合があります。
ローカル開発で使用する CouchDB データベースのサンプルを取得する良い方法は何ですか?
その答えは、フィルタリングされたレプリケーションです。私はこれを2つの部分で行うのが好きです:
example_db
実稼働データベースをローカル サーバーにレプリケートします。example_db_full
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);
}