Cassandra ドキュメント

バージョン

プレリリース版のドキュメントを表示しています。

最新版を表示

保証

Apache Cassandra は、非常にスケーラブルで信頼性の高いデータベースです。Cassandra は、多数のクライアントにサービスを提供する Web ベースのアプリケーションで使用され、処理されるデータ量は Web スケール(ペタバイト)の規模です。Cassandra は、そのスケーラビリティ、可用性、信頼性についていくつかの保証を提供します。特定レベルのネットワークパーティション障害が予想され、システム設計時に考慮される環境におけるストレージシステムの本質的な制限を完全に理解するには、まずCAP定理を簡単に紹介することが重要です。

CAP 定理とは?

CAP 定理によると、分散データストアは、次の保証を同時に 2 つ以上提供することはできません。

  • 一貫性: 一貫性とは、すべての読み取りが最新の書き込みを受け取る、またはエラーを返すことを意味します。

  • 可用性: 可用性とは、すべての要求が応答を受け取ることを意味します。応答が最新の書き込みまたはデータを含むことは保証されません。

  • パーティション耐性: パーティション耐性とは、ストレージシステムがネットワークパーティションの障害に耐える能力を指します。一部のメッセージがドロップまたは遅延しても、システムは動作を続けます。

CAP 定理は、ネットワークパーティションを使用する場合、パーティション障害の固有のリスクを伴い、一貫性と可用性のどちらかを選択する必要があり、両方を同時に保証することはできないことを意味します。CAP 定理は図 1 に示されています。

image
図 1. CAP 定理

高可用性は Web ベースのアプリケーションでは優先事項であり、この目標に向けて、Cassandra は CAP 保証から可用性とパーティション耐性を選択し、データの一貫性をある程度妥協しています。

Cassandra は、次の保証を提供します。

  • 高いスケーラビリティ

  • 高可用性

  • 耐久性

  • 単一テーブルへの書き込みの最終的な一貫性

  • 線形化可能な一貫性を持つ軽量トランザクション

  • 複数のテーブルにまたがるバッチ書き込みは、完全に成功するか、まったく成功しないことが保証されます。

  • セカンダリインデックスは、ローカルレプリカのデータと一貫性があることが保証されます。

高いスケーラビリティ

Cassandra は、必要に応じてノードを追加/削除できる、非常にスケーラブルなストレージシステムです。ゴシップベースのプロトコルを使用することで、各ノードに統一された一貫性のあるメンバーシップリストが保持されます。

高可用性

Cassandra は、フォールトトレラントなストレージシステムを実装することにより、データの高可用性を保証します。ゴシップベースのプロトコルを使用して、ノードの障害が検出されます。

耐久性

Cassandra は、レプリカを使用することでデータの耐久性を保証します。レプリカとは、クラスタ内の異なるノードに格納されているデータの複数の複製です。マルチデータセンター環境では、レプリカは異なるデータセンターに格納される場合があります。回復不能なノード/データセンターの障害により 1 つのレプリカが失われた場合でも、レプリカはまだ使用できるため、データは完全に失われることはありません。

最終的な一貫性

本番環境でのパフォーマンス、信頼性、スケーラビリティ、高可用性の要件を満たすために、Cassandra は最終的に一貫性のあるストレージシステムです。最終的な一貫性とは、すべての更新が最終的にすべてのレプリカに到達することを意味します。同じデータの異なるバージョンが一時的に存在する可能性がありますが、最終的には一貫性のある状態に調整されます。最終的な一貫性は、高可用性を実現するためのトレードオフであり、読み取りと書き込みのレイテンシが若干発生します。

線形化可能な一貫性を持つ軽量トランザクション

データは、順序どおりに読み書きする必要があります。Paxos コンセンサスプロトコルを使用して、軽量トランザクションが実装されます。Paxos プロトコルは、線形化可能な一貫性を使用して同時操作を処理できる軽量トランザクションを実装します。線形化可能な一貫性とは、リアルタイムの制約を伴うシーケンシャルな一貫性であり、比較と設定 (CAS) トランザクションによるトランザクションの分離を保証します。CAS を使用すると、レプリカデータが比較され、古くなっていることが判明したデータは、最も一貫性のある値に設定されます。線形化可能な一貫性による読み取りにより、新しい追加や更新を行うことなく、データの現在の状態(コミットされていない可能性のある状態)を読み取ることができます。

バッチ書き込み

複数のテーブルにまたがるバッチ書き込みの保証は、最終的に成功するか、まったく成功しないことです。バッチデータは最初に batchlog システムデータに書き込まれ、バッチデータがクラスタに正常に格納されると、batchlog データは削除されます。コーディネータノードが失敗した場合に完全なバッチが完了するように、バッチは別のノードにレプリケートされます。

セカンダリインデックス

セカンダリインデックスは列のインデックスであり、通常はクエリできないテーブルをクエリするために使用されます。セカンダリインデックスは、構築されると、ローカルレプリカと一貫性があることが保証されます。