Apache Cassandra

Apache Cassandra


概要と特徴

  • オープンソース (Open Source): Apache Software Foundation(ASF)によるオープンソースプロジェクト。
  • 分散型データベース (Distributed Database): 複数の汎用サーバー(ノード)にデータを分散配置し、大規模データに対応。
  • マスターレス・アーキテクチャ (Masterless Architecture): 全てのノードが対等であり、単一障害点(SPOF: Single Point of Failure)が存在しない。
  • 線形スケーラビリティ (Linear Scalability): ノードを追加するだけで、ほぼ線形に性能(容量とスループット)を向上可能。
  • 高可用性と耐障害性 (High Availability and Fault Tolerance): データのレプリケーション(複製)により、ノード障害時もサービスを継続。
  • チューナブル・コンシステンシー (Tunable Consistency): CAP定理においてAP(可用性・分断耐性)寄りだが、Consistency Level(整合性レベル)を設定することで、整合性を調整可能。
  • クエリ言語: SQLに似たCQL (Cassandra Query Language)を使用。

分類

  • カテゴリ: NoSQLデータベース
  • データモデル (Data Model): ワイドカラムストア (Wide-Column Store) / キーバリューストア (Key-Value Store)のハイブリッド。テーブル構造を持つが、行ごとに異なる列を持つなど柔軟性がある。

上位概念・下位概念

  • 上位概念:
    • NoSQL: 非リレーショナルなデータ管理システム全般。
    • 分散データベース (Distributed Database): 複数のマシンにデータを分散して保存するシステム。
  • 下位概念:
    • Keyspace: RDBMSにおけるスキーマ(データベース)に相当するコンテナ。レプリケーション戦略などを管理。
    • Table / Column Family: データを格納する構造。行と列で構成される。
    • CQL (Cassandra Query Language): Cassandraを操作するためのクエリ言語。

メリット

  • 書き込み処理が高速:
    • LSM-Tree (Log-Structured Merge-Tree)構造を採用し、ランダムアクセスではなくシーケンシャルアクセスに最適化されているため。
  • 高い可用性:
    • マスターレス、データ複製により、ノード障害が発生してもダウンタイムなしで動作継続。
  • 容易なスケールアウト (Scale-Out):
    • 安価な汎用サーバー(コモディティ・ハードウェア)の追加(ノード追加)だけで、サービスを停止せずに容易に水平拡張が可能。

デメリット

  • 複雑なクエリが苦手:
    • リレーショナルデータベース(RDB)のようなJOIN(結合)や複雑な集計機能はサポートされていないか、使用するとパフォーマンスが大幅に低下する(アンチパターン)。
    • 基本的にプライマリキーに基づくアクセスが最も効率的。
  • データモデリングの難しさ:
    • クエリが駆動する設計(クエリ主導モデル)が必要。RDBのように事前に一般的なスキーマを設計するのではなく、利用するクエリに合わせてテーブルを設計する必要がある。
  • 整合性の制約:
    • CAP定理により、高い可用性(Availability)と分断耐性(Partition Tolerance)を優先する場合、厳密な整合性(Consistency)を犠牲にする(結果整合性)必要がある。

既存との比較

項目 Apache Cassandra (NoSQL) RDBMS (例: MySQL, PostgreSQL)
アーキテクチャ マスターレス(ピアツーピア) マスタースレーブまたは単一サーバー
スケーラビリティ 水平スケールアウトに優れる(線形) 垂直スケールアップが主、水平スケールは複雑
可用性 高い(単一障害点なし) プライマリ障害時にダウンタイムが発生する可能性あり
整合性 チューナブル・コンシステンシー(結果整合性が基本) 強い整合性(ACID特性)
データモデル ワイドカラムストア(柔軟なスキーマ) 固定スキーマ(厳密なリレーション)
クエリ 単純なアクセスが高速、JOINなどは不可 複雑なJOINや集計処理が得意

競合

  • ワイドカラムストア:
    • Apache HBase
    • ScyllaDB (Cassandra互換、高パフォーマンス)
  • 他のNoSQL:
    • MongoDB (ドキュメント指向)
    • Redis (インメモリ、Key-Valueストア)
    • DynamoDB (AWSのマネージドKey-Value/ドキュメントデータベース)

導入ポイント

  • 書き込み処理が大量で、高速なデータ取り込みが必要なシステム。
  • 高可用性スケールアウトが最優先されるシステム。
  • データのアクセスパターンがシンプルで、プライマリキーに基づく参照が中心となるユースケース(例:IoTデータの時系列保存、ログデータ、大規模ユーザープロファイル)。
  • 複数のデータセンターにまたがる地理的な分散障害耐性が必要な場合。

注意点

  • データモデリング: RDBの常識にとらわれず、アクセスパターン(クエリ)に基づいてテーブルを設計する必要がある。
  • 整合性レベル (Consistency Level): システム要件に応じて適切に設定する必要がある。ALLは最高レベルの整合性を提供するが、ノードが1台でもダウンすると処理が失敗する。
  • Tombstone (墓石): データ削除時、すぐに物理削除されずTombstoneと呼ばれる削除フラグが残り、これが蓄積するとパフォーマンスが低下する可能性がある。
  • ALLOW FILTERING: CQLで使用できるオプションだが、プライマリキー以外の検索を強制的に実行させ、クラスタ全体のパフォーマンスを著しく低下させる可能性があるため、実運用では避けるべき。

今後

  • 機能強化: 最新バージョン(例: 5.0以降)では、軽量トランザクションのサポート強化、Javaバージョンの更新、セキュリティとモニタリング機能の改善などが進められている。
  • クラウド対応: Kubernetesなどのコンテナ技術への対応が進化し、クラウド環境での運用が容易になっている。

関連キーワード

  • NoSQL
  • 分散データベース (Distributed Database)
  • CAP定理 (CAP Theorem)
  • 結果整合性 (Eventual Consistency)
  • CQL (Cassandra Query Language)
  • Keyspace
  • SSTable (Sorted String Table)
  • Gossip Protocol
  • Partition Key
  • Replication Factor (RF)
  • Consistency Level