DS201: Foundations of Apache Cassandra™ and DataStax Enterprise の学習記録です。
Consistency Level (一貫性レベル)
Cassandraは、レプリケーションファクタ(RF)に応じてデータを複数のノードに分散して格納します。**Consistency Level(一貫性レベル)**は、クライアントからの読み取りまたは書き込み操作が、何個のレプリカ(複製)ノードで成功したとみなされた場合に、その操作が完了したとクライアントに通知するかを制御する設定です。
Consistency Levelは、**可用性(Availability)と一貫性(Consistency)**のトレードオフを調整するために使用されます。高い一貫性レベルを設定すると、データの一貫性は保証されますが、可用性やパフォーマンスが低下する可能性があります。逆に、低い一貫性レベルを設定すると、可用性やパフォーマンスは向上しますが、一時的にデータの一貫性が損なわれる可能性があります。
主なConsistency Level
Consistency Level | 説明 |
---|---|
ANY |
読み取りまたは書き込み操作は、少なくとも1つのレプリカ(コーディネーターノード自身を含む)に対して成功した場合に完了とみなされます。最も低い一貫性レベルで、可用性が最大化されます。 |
ONE |
読み取りまたは書き込み操作は、少なくとも1つのレプリカに対して成功した場合に完了とみなされます。ANY と異なり、コーディネーターノード自身ではなく、他のレプリカノードからの応答を待ちます。 |
TWO |
読み取りまたは書き込み操作は、少なくとも2つのレプリカに対して成功した場合に完了とみなされます。 |
THREE |
読み取りまたは書き込み操作は、少なくとも3つのレプリカに対して成功した場合に完了とみなされます。 |
QUORUM |
読み取りまたは書き込み操作は、レプリカの過半数(RF / 2 + 1 )に対して成功した場合に完了とみなされます。例えば、RF=3の場合、2つのレプリカからの応答が必要です。 |
ALL |
読み取りまたは書き込み操作は、すべてのレプリカに対して成功した場合に完了とみなされます。最も高い一貫性レベルで、可用性が最小化されます。 |
LOCAL_ONE |
読み取りまたは書き込み操作は、ローカルデータセンター内の任意の1つのレプリカに対して成功した場合に完了とみなされます。クロスデータセンター通信を避けるため、レイテンシが低減されます。 |
LOCAL_QUORUM |
読み取りまたは書き込み操作は、ローカルデータセンター内のレプリカの過半数に対して成功した場合に完了とみなされます。マルチデータセンター環境で、ローカルデータセンター内での一貫性を保証しつつ、クロスデータセンター通信のレイテンシを避ける場合に有用です。 |
EACH_QUORUM |
読み取りまたは書き込み操作は、各データセンター内のレプリカの過半数に対して成功した場合に完了とみなされます。マルチデータセンター環境で、各データセンター内での一貫性を保証する場合に有用です。 |
読み取りと書き込みの一貫性
Cassandraでは、読み取りと書き込みのConsistency Levelを独立して設定できます。例えば、「強い一貫性」を保証するためには、RF
と Consistency Level
の関係が重要になります。
- 強い一貫性:
読み取りConsistency Level + 書き込みConsistency Level > RF
を満たすように設定すると、常に最新のデータが読み取れる強い一貫性が保証されます。例えば、RF=3の場合、QUORUM
(2) で書き込み、QUORUM
(2) で読み取ると、2 + 2 = 4 > 3
となり、強い一貫性が保証されます。
アプリケーションの要件に合わせて、適切なConsistency Levelを選択することが、Cassandraを効果的に利用する上で非常に重要です。