6

同時ユーザーによる同じ行へのアクセス中の Cassandra 行レベル ロックのサポート

私たちは、Cassandra を在庫データベースとして考慮した、ショッピング カート アプリケーションの設計段階にあります。現在の要件は、複数のユーザーが在庫 DB の同じ商品行に同時にアクセスする場合です。例:- 製品テーブル: productID productQuantitiy 1000 1 最初のユーザーが製品「1000」を選択し、製品数量を「1」としてショッピング カートに追加した場合、同じ製品にアクセスする他のユーザーは、最初のユーザー (製品数量を 0 として更新)。カサンドラは、この種のシナリオに対して行レベルのロックをサポートしていますか

4

3 に答える 3

3

LWT が c* で利用可能になったので、更新された情報でこの古いスレッドを復活させます

歴史

Cassandra でのロックの実装が検討され、反対されました。この Jira で履歴、会話、最終的な解決策を確認できます --

https://issues.apache.org/jira/browse/CASSANDRA-5062 .

要約すると、1) cassandra に対して何らかのロックを実行できる外部オプションがいくつかあります (つまり、hector など) が、これらは次善のソリューションです。2) c* ロックを実装するのではなく (Zookeeper の統合と単一障害点の導入を意味します)、cassandra 独自の Paxos の実装を構築することが決定されました。これは、C* 2.0 以降で使用可能な軽量トランザクションとして公開されており、現在は DSE にあります。

このビデオでは、大手銀行が C* で LWT を使用している様子を見ることができます

https://www.youtube.com/watch?v=-sD3x8-tuDU&list=PLqcm6qE9lgKJkxYZUOIykswDndrOItnn2

注意点

1) LWT は、定義上、Cassandra の通常の挿入/更新ステートメントよりも遅く、少数のユース ケースで使用するように設計されています。ワークロードの 1%。

2) LWT はパーティション内でのみ機能します。クロス パーティション挿入は LWT をブロックしません。

于 2014-11-07T03:10:03.083 に答える
0

Cassandra は複数のユーザーをサポートしていますが、行をロックすることはありません。実際には、タイムスタンプを使用して最新の更新を同期し、別のノードと共有します。

于 2013-08-26T16:23:18.073 に答える