2011-09-12 7 views
5

CouchDBドキュメントにカウンタを格納し、各ページビューでインクリメントします。 CouchDBはカウンタ更新を1つだけ行うために、この文書の完全版を作成します。単純なカウンタを更新するときにCouchDBがドキュメントリビジョンを作成しないようにする方法

これはあまりにも多くのスペースを消費しませんか? 1日に1Mのヒットがあることを考慮すると、1日でドキュメントに1Mの改訂版が表示されている可能性があります。

これに関するご意見...

ありがとうございました!

答えて

7

CouchDBは、そのトレードオフを非常に明示しています。この特定のケースでは、悲しいことに、圧縮まで多くのディスクを使用できる、そして使用するクラッシュプルーフデータベースを持つことについて話しています。

この信頼性と読み込みの並行性が高いです。他のノードとシームレスに複製することもできます。これはそれのベーコンです。衝突したカウンタのためにコンパクトにすることは、それを吸うことです。 _rev_limitで周りの騒ぎを忘れる。あなたはリビジョンがソファの基礎になっているので、あなたはそれをやってしまうでしょう。

あなたが持っている可能性は、情報、日時、IPなどの情報を記録することです。次に、必要なデータを出力するビューを作成し、reduce関数として_countを使用します。分析に必要な情報や、貴重な情報を得ることができます。これは「ビューを作成する」ソリューションです。

第2の可能性は、redis(http://redis.io/commands/incr)を使用することです。 Redisはとても使いやすく、このユースケース(http://ai.mee.nu/is_couchdb_the_anti-redis)にうまく適合します。これは「正しい仕事のための適切なツール」ソリューションになります。

3つ目の可能性は、単純に無視することです。それはまったく問題にならないかもしれません(あなたが頻繁にコンパクト化する場合)。これは「ちょっとリラックスした」解決策になります。

あなたは悪いことをして、その利点が欠点よりも重要であることを確認しなければなりません。カット/最適化する前にすべてを測定します。

3

私は考えられません。

代替の解決方法は、小さな文書にカウンタを置き、定期的にcompactionを実行することです。これは最適ではありませんが、占有スペースを最小限に抑えます。

+0

私は同意しますが、この問題を回避するにはより良い方法があるはずです。私は特定の文書のリビジョンを制限することを検討しています。私の発見とこの質問を更新します... –

+0

いくつかの研究はこのスレッドを明らかにする - http://www.mail-archive.com/[email protected]/msg01974.html –

+0

データベースが_revs_limit = 1、Conflict resolution&Changesフィードは引き続き機能しますか?漸進的に、インクリメントカウンタを維持するために、データベースが_revs_limit = 1で構成されているドキュメントにこのようなキー/値のペアを設定することができます 考えますか? ありがとう! –

1

memcached(またはMembase)のようなものを "カウンタストレージ"として使用することを検討することもできます。これにより、CouchDBで余分なリビジョンを作成せずにこれらのカウンタを更新できます。私はあなたが実際にカウンタの中間状態をすべて保持する必要はないと仮定しています(あなたはリビジョンを保持したくないと言います)ので、このユースケースに適したものに入れておくことは理にかなっているようです。

0

我々は、文書がデフォルト千の回転数の制限を持っていた...

を少し実験をしていたが、我々は我々が約4ギガバイトになってしまった

をインクリメントまま1つの整数カウンタを、およそ100キロバイト添付ファイルのを持っていましたディスクは約200,000刻みで使用されます。使用された締固め&は約6KBに減少しました。

今はバマーです!

私の重大な懸念は、今や重いソファのインスタンスを頻繁に圧縮することです(1日に1時間に2回、1日に2回など)。

関連する問題