直列化可能な整合性で軽量トランザクションを実行する方法
軽量トランザクションとそれらを使用する場合について。
分散データベースでは、データの読み取りおよび書き込みを厳密な順序で行う必要がある場合、独特な問題があります。ユーザーのアカウント作成や送金のためのトランザクションでは、2つの潜在的な書き込み間の競合状態を調整して、1つの書き込みがもう一方の書き込みより優先されるようにする必要があります。DataStax Enterpriseデータベースでは、Paxos合意プロトコルを使用して、同時操作を処理できる軽量トランザクションを実装しています。
Paxosプロトコルは、リアルタイムの制約とのシーケンシャルな整合性である直列化可能な整合性を持つデータベースに実装されます。直列化可能な整合性によって、RDBMSが提供するシリアライズ可能なレベルと同様のレベルでトランザクション分離が確保されます。このタイプのトランザクションは、CAS(compare and set)として知られ、レプリカ・データが比較され、更新されていないと判断されたデータは最も整合している値に設定されます。DataStax Enterpriseでは、このプロセスによって、Paxosプロトコルと通常の読み取り操作および書き込み操作が組み合わされ、比較してセット操作が実行されます。
- 準備/約束
- 読み取り/結果
- 提案/受諾
- コミット/確認
これらの4つのフェーズでは、軽量トランザクションを提案するノードと、このトランザクションに含まれるクラスターのレプリカ間に4回の往復を要求します。パフォーマンスは影響を受けます。最終的には、同時実行を考慮する必要がある状況に対して軽量トランザクションを予約します。
DELETE ... INSERT .... IF NOT EXISTS SELECT ....以下の一連の操作は機能します。
DELETE ... IF EXISTS INSERT .... IF NOT EXISTS SELECT .....
直列化可能な整合性による読み取り
SERIAL整合性レベルを使用すると、新しい追加や更新を行おうとせずに、現在の(さらにコミットされていない可能性がある)データの状態を読み取ることができます。SERIALの読み取りにおいて進行中のコミットされていないトランザクションが見つかった場合、データベースはコミットの一環として読み取りリペアをコミットします。