4

「ユーザー」がいるとします。それが鍵です。そして、「ユーザー数」を維持する必要があります。キー「user」と値「0」から「9999+ ;-)」のレコードを作成する予定です(できるだけ多く)。

そのために Cassandra、HBase、または MySQL を使用すると、どのような問題が発生するでしょうか? たとえば、この「ユーザー」キーに何千もの新しい更新があり、値をインクリメントする必要があるとします。私は困っていますか?書き込みのためにロックされていますか? それを行う他の方法はありますか?

これが行われる理由 -- 多くの「ユーザー」のようなキーが存在します。別の他のケース。しかし、考え方は同じです。このままにしておくのはなぜですか。より多くの読み取りを行うため、常に「カウントされた値」を非常に高速に取得できるからです。

4

4 に答える 4

4

ユーザー数をリアルタイムで更新するのではなく、N 分ごとにバッチ操作として更新するだけです。更新するプロセスが 1 つしかない場合は、定義上、競合について心配する必要はありません。

あるいは、cassandra には、ZooKeeper を介してロック サポートを追加するための contrib/mutex があります。

于 2010-03-28T00:50:18.183 に答える
1

MongoDB と HBase にはこれが組み込まれています (一貫性を保証する他のほとんどのデータベースと同様)。

Cassandra の非常に単純なトリックの 1 つは、usercount 用に特定の行を用意し、ユーザーが追加されるたびに空の値を持つ一意の ID (ランダムな UUID など) の列名を挿入することです。一定の間隔で列の数を数え、それらを合計カウンターに入れます - 数えたばかりの列を削除します。

したがって、いつでも、合計ユーザー数は [合計カウンター] + [usercount 行の列数] になります。基本的に 2 回の読み取りでこれらを取得できます。行キャッシュを有効にすると、高速になります。

于 2010-09-18T17:18:23.077 に答える
1

MongoDB には、カウンター用の update-in-place と特別な inc 演算子があります。http://blog.mongodb.org/post/171353301/using-mongodb-for-real-time-analytics

于 2010-03-28T08:31:58.950 に答える
0

HBaseには、高速のアトミック読み取り/書き込み操作のためのincrementColumnValueメソッドがあります。

于 2010-06-29T00:08:34.450 に答える