web-dev-qa-db-ja.com

Cassandra-トランザクションサポート

Apache cassandraを使用して、サンプルデータの挿入、取得などに取り組んでいます。

ドキュメントは非常に限られています。

知りたい

  • mysql/Oracleのようなリレーションデータベースをcassandraに完全に置き換えることはできますか?
  • cassandraはロールバック/コミットをサポートしていますか?
  • cassandraクライアント(thrift/hector)は、関連するオブジェクト(1つのスーパー列のキーを別のスーパー列ファミリーに保存するオブジェクト)のフェッチをサポートしていますか?

これは私がさらに進むのに大いに役立ちます。

前もって感謝します。

31
Kumar D

簡単な答え:いいえ。

設計上、Cassandra整合性よりも可用性とパーティション許容度を評価します 1 。基本的に、3つの品質すべてを維持しながら許容可能なレイテンシを取得することはできません。1つを犠牲にする必要があります。 。これはCAP定理と呼ばれます。

整合性の量は、整合性レベルを使用してCassandraで構成可能ですが、ロールバックのセマンティクスは存在しません。最初の変更であっても、変更をロールバックできるという保証はありません。書き込みは成功します。

Cassandra上でトランザクションまたはロックを使用してアプリケーションを構築したくない場合は、分散同期を提供するために使用できるZookeeperを検討することをお勧めします。

すでに推測しているかもしれませんが、Cassandraには外部キーなどがありません。これは手動で処理する必要があります。私はHectorにあまり詳しくありませんが、より高い-レベルのクライアントは、これを半自動で実行できる可能性があります。

Cassandraを使用してRDBMSを簡単に置き換えることができるかどうかは、特定のユースケースによって異なります。(質問に基づく)ユースケースでは、そうするのは難しいかもしれません。

29
Lautis

バージョン2.xでは、ログに記録されたCQLステートメントを組み合わせることができます バッチ アトミックです。すべてのステートメントが成功するか、まったく成功しません。また、 軽量トランザクション について読むこともできます。それ以上に、Cassandraにはいくつかの永続性マネージャーがあります。それらを使用して、クライアントレベルで外部キーの動作を実現できます。たとえば、 Achilles および Kundera です。

6
sedovav

ZookeeperがOracle品質のトランザクションを処理できる場合、それは完了した取引です。リレーションとリレーションの整合性は、どのデータベースの上に実装しても問題ありません。外部キーは単なる別のデータフィールドです。 ACID/Transactionsが重要な問題です。

2
Mattias