Apache Cassandraとは?概要と特徴を理解する
はじめに
こんにちは!この記事は、僕自身の学習用の備忘録として書いています。
今回はCassandraの概要について少し踏み込んで学んでみました。案件で本格的に使うようになったので、まずはCassandraが何なのか、どんな特徴があるのかを整理してみます。
1. Apache Cassandraとは?
Apache Cassandraは、分散型NoSQLデータベースの一つで、Facebook社によって開発され、現在はApache Software Foundationがメンテナンスしているオープンソースのデータベース管理システムです。
分散システムはAmazonのDynamoDBを、データモデルはGoogleのBigtableをベースに作られ、Facebook社が自社サービスのInbox Search機能を強化するために開発を始めたのがきっかけとなっているようです。
1.1. 設計思想
CassandraはNoSQLとして、既存のRDB(MySQLなど)とよく比較されますが、設計思想が大きく異なります。そもそも、目的としている畑が違うのかなと調査していて感じました。
Cassandraは以下の3つの目標を達成するために設計されたようです:
- 高い可用性(High Availability): システムの一部に障害が発生しても、サービス全体が停止しない
- 高いスケーラビリティ(Scalability): データ量やアクセス数の増加に応じて、サーバーを追加するだけで性能をリニアに向上できる
- 高い耐障害性(Fault Tolerance): 複数のサーバーやデータセンターにデータを複製することで、データの損失を防ぐ
2. Cassandraの主要な特徴
2.1. KVS(Key-Value Store)型のデータベース
※ここの内容が複雑なため、箇条書きで記載していきます。
- CassandraはKVS型のデータベースである
- データをキーと値のペアで保存しますが、valueに複数のカラムを持つWide-column Storeをである。
- 1レコードをpartitionという単位で、partitionKeyで管理。
- partitionKeyはレコードを一意に識別するためのキーで、テーブル作成時に指定する。
- partitionはさらに複数の行(row)で構成され、各行は複数のカラム(column)を持つ。
- clusteringKeyはpartition内での行の順序を決定するために使用される。
2.1. マスターレスアーキテクチャ
Cassandraクラスターを構成するすべてのノード(サーバー)は対等な役割を持ちます。特定の「マスター」ノードが存在しないため、単一障害点(SPOF: Single Point of Failure)がありません。
すべてがマスターレベルのノードだそうで、どのノードに対しても読み書きできるようです。
2.2. スケーラビリティ
データ量やアクセス数が増加したとき、新しいノードをクラスターに追加するだけで、それに比例して性能が向上します。
実際にノード追加したときの内容は別の記事に記載しますが、以下のDataStaxのドキュメントが参考になりました。
しかも、無停止で追加できるので、実際にサービスを停止することなくスケールアウトできてしまいました。
DataStax Documentation
2.3. 高い可用性とレプリケーション
データは自動的に複数のノードに複製(レプリケーション)されます。
- レプリケーションファクター(RF): データを何台のノードに複製するかを指定
- 複数データセンター対応: 地理的に離れた場所にもデータを複製可能
- 自動フェイルオーバー: ノード障害時に自動的に他のレプリカに切り替え
2.4. 調整可能な一貫性(Tunable Consistency)
Cassandraを勉強初めて、一番優れていると感じた点が、目的に応じてデータの一貫性レベルを柔軟に調整できることです。
一貫性レベルの例:
-
ONE
: 1台のノードから応答があれば成功(高速) -
QUORUM
: 過半数のノードから応答があれば成功(バランス型) -
ALL
: すべてのノードから応答があれば成功(強い一貫性)
用途に応じて「速さ」と「正確さ」を使い分けられます。
分散システムにおけるCAP定理では、以下の3つのうち同時に2つしか満たせないとされています:
- C (Consistency): 整合性(どこから読んでも最新データ)
- A (Availability): 可用性(いつでも読み書きできる)
- P (Partition Tolerance): 分断耐性(ネットワークが分断されても動く)
Cassandraは基本的にAP型(可用性と分断耐性を重視)ですが、Consistency Levelにより、必要に応じてC(整合性)を重視した運用も可能です。
2.5. 高い書き込み性能
Cassandraは書き込み処理に最適化されています。
- 追記型アーキテクチャ: データを更新ではなく追記で処理
- メモリ中心の処理: 書き込みデータを一旦メモリに保存
- 非同期での永続化: ディスクへの書き込みを後から実行
- コンパクション: 定期的にデータを整理し、読み取り性能を維持
6. Cassandraの制限事項
Cassandraにも制限があります:
データモデリングの制約:
- JOINやサブクエリが使えない
- 複雑な集計処理が苦手
- 事前にクエリパターンを決める必要がある
まとめ
Apache Cassandraは、大規模・高可用性・高性能が求められるシステムに最適な分散型NoSQLデータベースです。
RDBで対応できる範囲のシステムはRDBを使うのがよさそうという印象は持ちましたが、最終必殺手段としてCassandraが出てくるんだろうなと感じました。
Cassandraの強み:
- マスターレスによる高い可用性
- 線形スケーラビリティ
- 調整可能な一貫性
- 高い書き込み性能
向いているシステム:
- 大量の書き込みが発生するシステム
- 24時間365日稼働が必要なシステム
実際に、Cassandraが提供している機能などを触ってみて、今後の記事にしていこうと思います。