| 原作者 | アビナシュ・ラクシュマン、プラシャント・マリク / Facebook |
|---|---|
| 開発者 | Apache ソフトウェア財団 |
| 初回リリース | 2008年7月 |
| 安定版リリース | 5.0.2 [1]
/ 2024年10月19日 |
| リポジトリ |
|
| 書かれた | ジャワ |
| オペレーティング·システム | クロスプラットフォーム |
| 利用可能 | 英語 |
| タイプ | NoSQL データベース、データストア |
| ライセンス | Apache ライセンス 2.0 |
| Webサイト | cassandra.apache.org |
Apache Cassandraは、複数のコモディティ サーバーにまたがる大量のデータを処理するように設計された、無料のオープン ソース データベース管理システムです。このシステムは、一貫性よりも可用性とスケーラビリティを優先し、 LSM ツリーインデックス ストレージ レイヤーにより、書き込みスループット要件が高いシステムに特に適しています。 [2]ワイドカラム データベースであるCassandra は、柔軟なスキーマをサポートし、多数のスパース カラムを持つデータ モデルを効率的に処理します。このシステムは、スキーマ設計に組み込むことができる明確に定義されたデータ アクセス パターンを持つアプリケーション向けに最適化されています。[2] Cassandra は、複数のデータ センターにまたがる可能性のあるコンピューター クラスターをサポートし、[3]非同期およびマスターレス レプリケーションを備えています。すべてのクライアントに対して低レイテンシ操作を可能にし、AmazonのDynamo分散ストレージおよびレプリケーション技術と、GoogleのBigtableデータ ストレージ エンジン モデルを組み合わせています。[4]
歴史
AmazonのDynamoの共著者であるAvinash LakshmanとPrashant Malikは、Facebookで受信トレイの 検索機能をサポートするためにCassandraを開発しました。Facebookは2008年7月にGoogle CodeでオープンソースソフトウェアとしてCassandraをリリースしました。 [5] 2009年3月にはApache Incubatorプロジェクトとなり[6]、2010年2月17日にトップレベルプロジェクトに昇格しました。[7]
Facebookの開発者は、トロイの神話に登場する女預言者カサンドラにちなんでデータベースに名前を付けました。これは、決して信じられない予言をする彼女の呪いに由来しています。[8]
機能と制限
Cassandraは、すべてのノードが同一の機能を実行する分散アーキテクチャを採用し、単一障害点を排除します。このシステムは、構成可能なレプリケーション戦略を採用してクラスター全体にデータを分散し、冗長性と災害復旧機能を提供します。継続的なサービスを維持しながら、ノードを追加するたびに読み取りおよび書き込みスループットが増加することで、線形スケーリングを実現します。
CassandraはAP(Availability and Partition Tolerance)システムに分類され、一貫性よりも可用性とパーティション耐性を重視しています。読み取りと書き込みの両方の操作に対して調整可能な一貫性レベルを提供しますが、そのアーキテクチャでは、厳密な一貫性の保証を必要とするユースケースにはあまり適していません。[2]さらに、CassandraはHadoopや関連ツールと互換性があるため、既存のビッグデータ処理ワークフローと統合できます。最終的な一貫性は、読み取り、アップサート、削除を 管理するためにトゥームストーンを使用して維持されます。
システムのクエリ機能には顕著な制限があります。Cassandraは、マルチテーブルJOIN、アドホック集計、複雑なクエリなどの高度なクエリパターンをサポートしていません。[2]これらの制限は、複雑なクエリ操作ではなく、スケーラビリティと可用性を最適化する分散アーキテクチャに起因しています。
データモデル
Cassandraはワイドカラムストアとして、キーバリューデータベースと表形式データベースの両方の機能を兼ね備えています。調整可能な一貫性レベルを持つパーティション化された行ストアモデルを実装しています。[9]
データ モデルは、いくつかの階層コンポーネントで構成されます。
キースペース
Cassandraのキースペースはリレーショナルシステムのデータベースに似ています。複数のテーブルが含まれ、レプリケーション戦略やユーザー定義型(UDT)などの構成情報を管理します。[2]
テーブル
テーブル( CQL 3より前は列ファミリーと呼ばれていました)は、データ行を格納するコンテナです。各テーブルには、格納されているデータの名前と構成情報があります。テーブルは、更新やクエリをブロックすることなく、実行時に作成、削除、または変更できます。 [10]
行と列
各行は主キーによって識別され、列が含まれています。テーブルの主キーの最初のコンポーネントはパーティションキーです。パーティション内では、行はキーの残りの列によってクラスター化されます。 [11]
列には行に属するデータが含まれ、次のもので構成されます。
- 名前
- タイプ
- 価値
- タイムスタンプ メタデータ (「最後の書き込みが優先」による書き込み競合解決に使用)
従来のRDBMSテーブルとは異なり、同じテーブル内の行にはさまざまな列を含めることができ、柔軟な構造を提供します。この柔軟性により、Cassandraはリレーショナルデータベースと区別されます。各行にすべての列を指定する必要はありません。[2]他の列は、主キーとは別にインデックス付けできます。[12]
ストレージモデル
Cassandraは、ほとんどのデータベースで使用されるBツリーインデックスとは対照的に、ログ構造マージツリー(LSMツリー)インデックスを使用して書き込みスループットを最適化します。[2]
ストレージアーキテクチャは3つの主要コンポーネントで構成されています[2]。
コアコンポーネント
- コミットログ:書き込みの耐久性を保証する先行書き込みログ
- Memtable :主キーでソートされた書き込みを保存するメモリ内データ構造
- SSTable (ソートされた文字列テーブル): Memtables からフラッシュされたデータを含む不変ファイル
書き込みと読み取りのプロセス
書き込み操作は 2 段階のプロセスで実行されます。
- 書き込みはコミットログに記録され、Memtableに追加されます。
- Memtableがサイズまたは時間のしきい値に達すると、SSTableにフラッシュされます。
読み取り操作:
- 最新のデータはMemtableで確認してください
- 効率化のためにブルームフィルターを使用して、SSTables を最新から古い順に検索します。
データ管理
墓石
すべての操作(作成/更新/削除)は新しいエントリを生成し、削除は「トゥームストーン」によって処理されます。多くのデータベースで一般的ですが、トゥームストーンは削除が多いワークロードでパフォーマンスの低下を引き起こす可能性があります。[13]
圧縮
圧縮により複数の SSTable が統合され、次のことが実現されます。
- ストレージ使用量を削減
- 削除された行の墓石を削除する
- 読み取りパフォーマンスの向上
Cassandra クエリ言語
Cassandra Query Language (CQL) は、従来の構造化クエリ言語(SQL)の代替として、Cassandra にアクセスするためのインターフェイスです。CQL は、この構造の実装の詳細を隠し、コレクションやその他の一般的なエンコードのネイティブ構文を提供する抽象化レイヤーを追加します。言語ドライバーは、 Java ( JDBC )、Python (DBAPI2)、Node.JS ( DataStax )、Go (gocql)、C++で利用できます。[14]
Cassandraのキー空間は、ノード間のデータレプリケーションを定義する名前空間です。したがって、レプリケーションはキー空間レベルで定義されます。以下は、CQL 3.0の列ファミリーを含むキー空間の作成例です。[15]
REPLICATION = { 'class' : 'SimpleStrategy' , 'replication_factor' : 3 }を指定してキースペースMyKeySpace を作成します。
MyKeySpaceを使用します。
CREATE COLUMNFAMILY MyColumns ( id text 、lastName text 、firstName text 、PRIMARY KEY ( id ));
MyColumns ( id 、lastName 、firstName )にVALUES ( '1' 、'Doe' 、'John' ) を挿入します。
MyColumnsから* を選択します。
つまり、次のようになります。
ID | 姓 | 名
----+----------+----------
1 | ドウ | ジョン
(1行)
分散アーキテクチャ
ゴシッププロトコル
Cassandra は、クラスター通信にピアツーピアのゴシップ プロトコルを使用します。ノードは、次のようなクラスターの状態に関する情報を定期的に交換します。
- ノードの可用性ステータス
- スキーマのバージョン
- 生成タイムスタンプ(ノードブートストラップ時間)
- バージョン番号(論理クロック値)
このシステムはベクトルクロックを使用して情報の最新性を追跡し、古くなった状態データを無視します。[2]
シードノード
このアーキテクチャでは、次のような特定のノードを「シード」ノードとして指定します。
- クラスターのブートストラップ
- 確実なゴシップコミュニケーションポイントとして機能する
- クラスターの断片化を防ぐ
- サービス検出方法を介して検出可能のままにする
この設計により、単一障害点が排除され、クラスタ全体の運用知識の一貫性が維持されます。[2]
フォールトトレランス
Cassandra は、クラスタ操作中のノード障害を管理するために Phi Accrual Failure Detector を採用しています。[16]このシステムを通じて、各ノードはゴシップ通信中に他のノードの可用性を独立して評価します。ノードが応答に失敗すると、そのノードは「有罪」と判断され、書き込み操作から除外されますが、ハートビート信号を再開するとクラスタに再参加できます。[2]
ノード停止中にデータの整合性を維持するために、Cassandra は「ヒント付きハンドオフ」メカニズムを使用します。オフライン ノードに書き込む場合、コーディネーター ノードは書き込みデータを「ヒント」として一時的に保存します。オフライン ノードがサービスに戻ると、これらのヒントが転送され、データの整合性が回復されます。特に、Cassandra は明示的な管理上の廃止または再構築を通じてのみノードを永久的に削除し、一時的な通信障害や再起動によって不要なデータの再バランス調整が引き起こされるのを防ぎます。[2]
管理と監視
CassandraはJavaベースのシステムで、Java Management Extensions (JMX)を介して管理および監視できます。たとえば、JMX準拠のNodetoolユーティリティを使用して、Cassandraクラスターを管理できます。 [17] Nodetoolは、ディスク使用量、レイテンシ、圧縮、ガベージコレクションなどに関するCassandraメトリックを返すコマンドも多数提供しています。[18]
2013年のCassandra 2.0.2のリリース以来、いくつかのメトリックの測定値はDropwizardメトリックフレームワーク[19]を介して生成され、 JConsoleなどのツールを使用してJMX経由で照会したり、Dropwizard互換のレポータープラグインを介して外部監視システムに渡したりすることができます。[20]
リリース
卒業後のリリースは次のとおりです。
参照
- Bigtable – Google によるオリジナルの分散データベース
- 分散データベース
- 分散ハッシュテーブル(DHT)
- Dynamo(ストレージシステム) - CassandraはDynamoから多くの要素を借用しています
参考文献
- ^ 「cassandra-5.0.2 をリリース」。
- ^ abcdefghijkl カーペンター、ジェフ; ヒューイット、エベン (2022)。カサンドラ:決定版ガイド(第3版)。オライリーメディア。ISBN 978-1-4920-9710-5。
- ^ Casares, Joaquin (2012 年 11 月 5 日)。「Cassandra でのマルチデータセンター レプリケーション」。DataStax。2013年7 月 25 日閲覧。Cassandra
の本来のデータセンター コンセプトは、複数のワークロードを複数のデータセンターで実行できるため重要です...
- ^ 「Apache Cassandra ドキュメントの概要」 。2021年1 月 21 日閲覧。
- ^ Hamilton, James (2008 年 7 月 12 日)。「Facebook が Cassandra をオープン ソースとしてリリース」。2009 年6 月 4 日閲覧。
- ^ 「これが今、新しい流行りなのか?」 Mail-archive.com。2009年3月2日。2010年4月25日時点のオリジナルよりアーカイブ。2010年3月29日閲覧。
- ^ 「Cassandra は Apache のトップレベル プロジェクトです」。Mail-archive.com。2010 年 2 月 18 日。2010 年 3 月 28 日時点のオリジナルよりアーカイブ。2010年3 月 29 日閲覧。
- ^ 「Apache Cassandra の名前の意味」。2016 年 11 月 1 日にオリジナルからアーカイブ。2016年7 月 19 日に閲覧。Apache
Cassandra は、ギリシャ神話の預言者 Cassandra にちなんで名付けられました。[...] 彼女の美しさから、アポロンは彼女に予言の能力を与えました。[...] トロイの Cassandra がアポロンの申し出を拒否したとき、彼は彼女と彼女の子孫の予言がすべて信じられないように呪いをかけました。[...] Cassandra は呪われた預言者です[.]
- ^ DataStax (2013年1月15日). 「データの一貫性について」。2013年7月26日時点のオリジナルよりアーカイブ。 2013年7月25日閲覧。
- ^ Ellis, Jonathan (2012 年 3 月 2 日)。「Cassandra 1.1 におけるスキーマ管理のルネッサンス」。DataStax。2013年7 月 25 日閲覧。
- ^ Ellis, Jonathan (2012 年 2 月 15 日)。「Cassandra 1.1 のスキーマ」。DataStax。2013年7 月 25 日閲覧。
- ^ Ellis, Jonathan (2010 年 12 月 3 日)。「Cassandra 0.7 の新機能: セカンダリ インデックス」。DataStax。2013年7 月 25 日閲覧。
- ^ Rodriguez, Alain (2016 年 7 月 27 日)。「Cassandra の削除とトゥームストーンについて」。
- ^ 「Apache Cassandra 用 DataStax C/C++ ドライバー」。DataStax。2014年12 月 15 日閲覧。
- ^ 「CQL」。2016年1月13日時点のオリジナルよりアーカイブ。2016年1月5日閲覧。
- ^ 林原直宏;デファゴ、ザビエル。ヤレッド、ラミ。片山拓也(2004)。 「Φ発生不良検出器」。信頼性の高い分散システムに関する IEEE シンポジウム。 66–78ページ。土井:10.1109/RELDIS.2004.1353004。
- ^ 「NodeTool」。Cassandra Wiki。2016年1月13日時点のオリジナルよりアーカイブ。2016年1月5日閲覧。
- ^ 「Cassandra パフォーマンス メトリックを監視する方法」。Datadog。2015 年 12 月 3 日。2016 年1 月 5 日閲覧。
- ^ 「Metrics」。Cassandra Wiki。2015年11月12日時点のオリジナルよりアーカイブ。2016年1月5日閲覧。
- ^ 「モニタリング」。Cassandraドキュメント。2018年2 月 1 日閲覧。
- ^ 「Cassandra Server Releases」. cassandra.apache.org . 2015年12月15日閲覧。
文献
- カーペンター、ジェフ。ヒューイット、イーベン(2022年1月23日)。Cassandra: 決定版ガイド(第 3 版)。オライリーメディア。 p. 432.ISBN 978-1-4920-9710-5。
- カプリオロ、エドワード (2011 年 7 月 15 日)。Cassandra High Performance Cookbook (第 1 版)。Packt Publishing。p . 324。ISBN 978-1-84951-512-2。
- ヒューイット、エベン(2010 年 12 月 15 日)。『Cassandra: The Definitive Guide』(第 1 版)。O'Reilly Media。300ページ。ISBN 978-1-4493-9041-9。
外部リンク
- Lakshman, Avinash (2008 年 8 月 25 日)。「Cassandra - P2P ネットワーク上の構造化ストレージ システム」。Engineering @ Facebook's Notes。2014年6 月 17 日閲覧。
- 「Apache Cassandra プロジェクト」。米国メリーランド州フォレストヒル: Apache ソフトウェア財団。2014年6 月 17 日閲覧。
- 「Project Wiki」。米国メリーランド州フォレストヒル:Apache Software Foundation。2014年6月14日時点のオリジナルよりアーカイブ。 2014年6月17日閲覧。
- Hewitt, Eben (2010 年 12 月 1 日)。「Apache Cassandra の導入」。infoq.com。InfoQ、C4Media Inc。2014年6 月 17 日閲覧。
- Lakshman, Avinash、Malik, Prashant (2009 年 8 月 15 日)。「Cassandra - 分散構造化ストレージ システム」(PDF)。cs.cornell.edu 。著者はFacebookの出身です。2014年6 月 17 日に取得。
- Ellis, Jonathan (2009 年 7 月 29 日)。「データベースのスケーラビリティについてすべての開発者が知っておくべきこと」。slideshare.net。2014年6月 17 日閲覧。RDBMS と Dynamo、Bigtable、Cassandra の比較に関するOSCON 2009 の講演より。
- 「Cassandra-RPM - Apache Cassandra プロジェクト用の Red Hat Package Manager (RPM) ビルド」。code.google.com。米国カリフォルニア州メンロパーク: Google プロジェクト ホスティング。2014年6 月 17 日閲覧。
- Roth, Gregor (2012 年 10 月 14 日)。「Cassandra の例 - 読み取りおよび書き込み要求のパス」。slideshare.net。2014年6月 17 日閲覧。
- Mansoor, Umer (2012 年 11 月 4 日)。「Cassandra チュートリアルのコレクション」。2015 年2 月 8 日閲覧。
- Bushik, Sergey (2012 年 10 月 22 日)。「ベンダーに依存しない NoSQL データベースの比較: Cassandra、HBase、MongoDB、Riak」。NetworkWorld。米国マサチューセッツ州フレーミングハムおよび英国ミドルセックス州ステインズ: IDG。2014年 5 月 28 日時点のオリジナルよりアーカイブ。2014年6 月 17 日閲覧。
