CassandraトランザクションとRDBMSトランザクションの違い

Cassandraは、ロールバック・メカニズムやロッキング・メカニズムを用いるRDBMS ACIDトランザクションを使用せず、代わりにユーザーが各トランザクションの整合性の強さまたは整合性が確保されるまでの時間を決定できる、結果的/調節可能な整合性を備えた、アトミックで分離した、永続性のあるトランザクションを提供します。

Cassandraはリレーショナル・データベースではないため、結合や外部キーをサポートしておらず、そのためACIDの意味での整合性が提供されません。たとえば、口座Aから口座Bにお金を移しても、全体の口座金額は変わりません。Cassandraでは行レベルでアトミック性と分離性をサポートしていますが、トランザクションの分離性とアトミック性と引き換えに、可用性の高さと書き込みパフォーマンスの高さを確保しています。Cassandraの書き込みは永続性を確保します。

アトミック性

Cassandraでは、書き込みはパーティション・レベルでアトミックです。これは、行に複数カラムを挿入したり行の複数のカラムを更新したりすることが、1つの書き込み操作として扱われるということです。削除操作もアトミックに実行されます。

たとえば、レプリケーション係数が3のときにQUORUMの書き込み整合性レベルを使用した場合、Cassandraはクラスターのすべてのレプリケーション先ノードにその書き込みをレプリケートし、2つのノードからの確認応答を待ちます。ノードの1つで書き込みが失敗しても他が成功した場合、Cassandraはそのノードでの書き込みのレプリケーション失敗を報告します。しかし、ほかのノードで成功した、レプリケート済みの書き込みは、自動的にロールバックされません。

Cassandraはクライアント側のタイムスタンプを使用して、カラムに対する最新の更新を判断します。データを要求したとき、最新のタイムスタンプが常に優先されるため、複数のクライアント・セッションが1つの行の同じカラムを同時に更新した場合、最新の更新が読み取り側に示されます。

分離

完全な行レベルの分離が整ったため、行への書き込みが、書き込みを実行しているクライアントに対して分離され、これが完了するまで他のユーザーからは見えなくなりました。削除操作は個別に行われます。指定されたパーティション・キーに属するバッチ操作のすべての更新は、個別に実行されます。

永続性

Cassandraの書き込みは永続性があります。レプリカ・ノードへのすべての書き込みは、メモリーとディスク上のコミット・ログの両方に記録されてから成功と認識されます。memtableがディスクにフラッシュされる前にクラッシュまたはサーバーの不具合が生じると、失われた書き込みを回復するために、再起動時にコミット・ログがリプレイされます。ローカル永続性(データがすぐにディスクに書き込まれる)だけでなく、他のノードのデータのレプリケーションによっても永続性が強化されます。

cassandra.yamlファイルのcommitlog_syncオプションを使用して、ローカル永続性が整合性のニーズに合うように管理することができます。オプションをperiodicまたはbatchのいずれかに設定します。

cassandra.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/cassandra/cassandra.yaml
tarボール・インストール install_location/resources/cassandra/conf/cassandra.yaml
Windowsインストール C:\Program Files\DataStax Community\apache-cassandra\conf\cassandra.yaml