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

DataStax Enterprise(DSE)は、RDBMS ACIDトランザクションを使用しませんが、代わりに、結果的/調節可能な整合性を備えた、アトミック性、分離性、永続性のあるトランザクションを提供します。

cassandra.yaml

cassandra.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/cassandra/cassandra.yaml
tarボール・インストール installation_location/resources/cassandra/conf/cassandra.yaml

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

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

アトミック性

DSEデータベースでは、書き込み操作はパーティション・レベルでアトミックです。これは、同じパーティションでの複数の行の挿入または更新が、1つの書き込み操作として扱われるということです。削除操作もパーティション・レベルでアトミックです。

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

DSEはクライアント側のタイムスタンプを使用して、カラムに対する最新の更新を決定します。データを要求したとき、最新のタイムスタンプが常に優先されるため、複数のクライアント・セッションが1つの行の同じカラムを同時に更新した場合、最新の更新が読み取り側に示されます。
注: すべての書き込みのタイムスタンプは、UTC(協定世界時)です。

分離性

DSEの書き込みおよび削除操作は、完全な行レベルの分離で実行されます。つまり、単一ノード上の単一パーティション内の行への書き込みを見ることができるのは、操作を行っているクライアントだけです。操作は、完了するまでこの範囲に制限されます。指定されたパーティション・キーに属するバッチ操作のすべての更新に同じ制限があります。ただし、複数のパーティションへの変更が含まれている場合、バッチ操作は分離されません。

永続性

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

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