概要
Apache Cassandraは、オープンソースの分散NoSQLデータベースです。最終的な整合性セマンティクスを備えたパーティション化されたワイドカラムストレージモデルを実装しています。
Cassandraは当初、ステージングされたイベント駆動型アーキテクチャ(SEDA)を使用して、Facebookで設計されました。この初期設計では、AmazonのDynamo分散ストレージおよびレプリケーション技術と、GoogleのBigtableデータおよびストレージエンジンモデルの組み合わせを実装しました。DynamoとBigtableはどちらも、スケーラブルで信頼性が高く、可用性の高いストレージシステムに対する新たな要件を満たすために開発されましたが、それぞれ改善できる点がありました。
Apache Cassandraは、データフットプリントとクエリ量の両方で大規模なストレージ要件を満たすために、両方のシステムの最高の組み合わせとして設計されました。アプリケーションがグローバルなレプリケーションと常に利用可能な低レイテンシーの読み取りおよび書き込みを必要とするようになると、これらの新しい要件を満たすために新しい種類のデータベースモデルが必要になりました。当時のリレーショナルデータベースシステムは、要件を満たすのに苦労しました。
Apache Cassandraは、以下の設計目標を念頭に置いて、これらの課題に対応するように設計されました。
-
完全なマルチプライマリデータベースのレプリケーション
-
低レイテンシでのグローバルな可用性
-
コモディティハードウェアでのスケールアウト
-
プロセッサを追加するたびに線形のスループットの増加
-
オンライン負荷分散とクラスタの成長
-
パーティション化されたキー指向のクエリ
-
柔軟なスキーマ
特徴
Cassandraは、データベーススキーマを作成、変更、削除したり、データにアクセスしたりするためのSQLのような言語であるCassandra Query Language(CQL)を提供します。CQLを使用すると、ユーザーは次のものを使用してCassandraノードのクラスタ内にデータを整理できます。
-
キースペース:データセットがデータセンターごとにどのようにレプリケートされるかを定義します。レプリケーションは、クラスタごとに保存されるコピーの数です。キースペースにはテーブルが含まれます。
-
テーブル:テーブルは行と列で構成されます。列は、テーブル内の単一データの型付きスキーマを定義します。テーブルは、パーティションキーで指定された列に基づいてパーティション化されます。Cassandraテーブルは、ダウンタイムなしでテーブルに新しい列を柔軟に追加できます。
-
パーティション:Cassandra内のすべての行が、行が保存されているクラスタ内のノードを識別するために持つ必要のある、必須のプライマリキーの部分を定義します。すべてのパフォーマンスの高いクエリは、クエリでパーティションキーを提供します。
-
行:パーティションキーと、オプションで追加のクラスタリングキーで構成される一意のプライマリキーによって識別される列のコレクションが含まれます。
-
列:行に属する型を持つ単一のデータです。
CQLは、次のようなパーティション化されたデータセットの高度な機能を多数サポートしています。
-
セット、マップ、リストを含むコレクション型
-
ユーザー定義型、タプル、関数、および集計
-
セカンダリインデックス用のストレージアタッチインデックス (SAI)
-
ローカルセカンダリインデックス (2i)
-
ユーザー定義型、関数、および集計
-
アトミックな比較と設定セマンティクスを備えた単一パーティションの軽量トランザクション
-
(実験的) マテリアライズドビュー
Cassandraは、通常は遅く、可用性の高いグローバルセマンティクスを提供するのが難しいクロスパーティションコーディネーションを必要とする操作を明示的に実装しないことを選択します。たとえば、Cassandraは以下をサポートしていません。
-
クロスパーティショントランザクション
-
分散結合
-
外部キーまたは参照整合性。
運用
Apache Cassandraの構成設定は、cassandra.yaml
ファイルで構成され、手動で編集することも、構成管理ツールを使用して編集することもできます。一部の設定はオンラインインターフェースを使用してライブで操作できますが、他の設定を有効にするにはデータベースの再起動が必要です。
Cassandraは、クラスタを管理するためのツールを提供します。nodetool
コマンドは、Cassandraのライブコントロールインターフェースと対話し、cassandra.yaml
からの多くの設定の実行時操作を可能にします。auditlogviewer
は、監査ログを表示するために使用されます。fqltool
は、フルクエリログを表示、再生、比較するために使用されます。
さらに、Cassandraは、多くのバックアップツールとの簡単な統合のために、Cassandraのデータの特定の時点(PIT)スナップショットを提示するアトミックスナップショット機能をすぐにサポートしています。Cassandraは、データが書き込まれるときにバックアップできる増分バックアップもサポートしています。