8

カサンドラの組み込み関数を使用してクライアントを同期する方法はありますか?

いくつかの操作を実行する必要があり、それらの操作を他のすべてのクライアントと同期する必要があります (相互排除)。

RDBMSでは、テーブル全体をロックするか、同期のために特別なテーブルを準備して、SELECT ... FOR UPDATEを使用できます。

サードパーティのアプリなしで Cassandra でこれを実現できますか? そうでない場合、それを行う最良の方法は何ですか?好ましい言語は Java と Python です。

4

4 に答える 4

8

Apache ZooKeeperなどのサードパーティ ライブラリがないと、列ファミリ全体 (またはそのサブセット) をロックすることはできません。

独自の分散型ロック メカニズムを開発する前に、ドミック ウィリアムズケージを検討することになるでしょう。

于 2011-01-17T21:17:12.633 に答える
2

C* は行レベルの原子性を提供するため、Lamport's Bakery Algorithmを使用しないでください。C* wiki でも不完全なページを見つけました。

https://github.com/jakedouglas/cassandra_lock

于 2012-05-19T13:53:21.483 に答える
2

列ファミリーの 1 つの行を更新する場合、それはアトミックです。ただし、select for update のようには機能しません。同期について心配する必要がないように、より多くの非正規化を念頭に置いてデータ モデルを再検討する必要があります。

于 2011-01-25T21:34:16.963 に答える
0

また、cassandra と同期する方法を探していましたが、私が知る限り、mutex を実装するメカニズムは提供されていません。

ただし、me​​mcached には、mutex の実装に使用できるアトミック cas (チェックおよび設定) 操作があります。また、python および Java クライアントもあります。

そのため、memcached を使用して同期用のミューテックスを実装し、cassandra でクォーラム整合性レベルでデータの読み取り/書き込みを行って、読み取り時に常に最新の書き込みが返されるようにすることができます。

memcached でミューテックスを実装した経験のある人はいますか?

于 2011-03-19T21:01:30.910 に答える