Apache Cassandra の概要: 101
Cassandra は、分散型、分散型、フォールト トレラントな NoSQL データベースです。2008 年に Facebook のエンジニアによって最初に作成されました。これは、Amazon の DynamoDB と Google の BigQuery に触発されて、Messenger アプリケーションでの必要性が生じたものです。その後、Apache 組織に買収され、Apache Cassandra になりました。Cassandra は分散型であるため、高いパフォーマンスで水平方向のスケーリングが可能です。それとは別に、分散構造、つまり、単一のコントローラー/マスター ノードがクラッシュした場合に、この役割を継続できるノードが存在する構造になっています。これにより、Cassandraに高可用性がもたらされます。最後に、この短い紹介で言及したいのは、レプリケーション機能のおかげでフォールト トレラントでもあるということです。
データ・モデル
Cassandra は、列ベースのデータベースであり、ネストされたマップが形成されます。従来のデータベースと比較すると、データベースの代わりにキースペースを使用し、テーブルの代わりに列ファミリー構造を使用します。列ベースの構造のため、RDBMS よりもコストのかかるトランザクション操作が発生します。したがって、 OLTPにはあまり適していませんが、目的の列の情報にすばやくアクセスできるという点で、効率的に読み取りを行うことができます。この点で、これはOLAPの代替データベースとして非常に適しています。
キーとインデックス
Cassandra にはRDBMS と同様に主キーがありますが、外部キーはありません。同様に、副次索引の概念があります。ただし、副次索引は外部キーほど効率的ではありません。主キー ポイントでは、RDBMS は一意のトークンで構成され、行ごとに異なります。さらに、主キーは Cassandra では特に重要です。データの配布と保存はそれらによって決定されるためです。
主キー = パーティション キー + クラスタリング キー
主キーには、データがどのように分散されるかに関する情報を含むパーティション キーと、このデータがノードでどのようにソート/格納されるかに関する情報を含むクラスタリング キーがあります。パーティション キーの作成時には、パーティション関数とハッシュ アルゴリズムが使用されます。この分割アルゴリズムは、[-2⁶³, 2⁶³-1] の範囲の値を生成するために使用されます。現在、最も頻繁に使用される 2 つのパーティショナーがあり、使用するハッシュ アルゴリズムによって異なります。
- RandomPartitioner: MD5ハッシュでトークンを生成します
- Murmur3Partitioner: Murmurハッシュによってトークンを生成します。これは Cassandra のデフォルト設定です。
基本構造
Cassandra で任意のインスタンスを実行しているサーバーはノードと呼ばれます。1 つ以上のノードが集まってデータ センターを形成します。1 つ以上のデータ センターが集まってクラスターを形成します。各ノードは、周囲の他のノードと通信します。この通信では、現在の活動状況や、動作可能かどうかなどの情報を送信します。この通信プロトコルはGossip Protocolと呼ばれます。
ヒント付きハンドオフ
アクションが発生したときにノードがその時点で応答できない場合、このアクションはヒント ファイルに書き込まれます。このファイルには、アクションに関する情報が一定期間保持されます。ノードがこの期間内に再度アクションを実行できる場合、アクション情報がファイルから取得されて適用されます。ただし、この期間内にアクションを実行できなかった場合、アクション情報を含むファイルは破棄されます。このメカニズムはHinted Hand-offと呼ばれます。このメカニズムのおかげで、Cassandra は特定の時点での一貫性を保証します。
一貫性レベル
Cassandra には調整可能な一貫性があります。一貫性レベルと一貫性の割合を制御できます。Writing と Readingにはさまざまな形式の一貫性があります。記述の一貫性には 4 つのレベルがあります。
- 1:レプリカ ノードのいずれかが成功を返した場合、ユーザーはアクションが正常に完了したという結果を返します。
- すべて:すべてのレプリカ ノードから成功の結果が返された場合、ユーザーはアクションが正常に完了したという結果を返します。
- クォーラム:アクションが成功したと見なされるために、レプリカ ノードからの成功の最小数が指定されます。この数の成功した結果が返された場合、アクションが成功したことがユーザーに通知されます。
- ローカル クォーラム:複数のデータセンターを持つ構造では、クォーラムはデータセンターごとに決定され、クォーラム ロジックのレベルです。
- 1:コントローラー ノードは、レプリカ ノード間で到達できる限りの速さでデータを読み取り、それをユーザーに送信しようとします。
- All:結果はすべてのレプリカ ノードから期待されます。
- 定足数:書面にあるように、成功した結果の最小数が期待されます。こことは異なり、最速の結果が読み取られ、ハッシュが保持されます。次に、クォーラム数に従ってレプリカのハッシュが取得されます。次に、すべてのハッシュが比較され、ハッシュが同じ場合、最初に読み取られたデータが返されます。
レプリカと一貫性
レプリカ、つまり Cassandra にコピーされたデータは、基本的に 2 つの重要な機能に従って実装されます。その 1 つが複製戦略です。データ センターが 1 つしかない場合はシンプル戦略が使用されますが、データ センターが複数ある場合はネットワーク トポロジ戦略が使用されます。もう 1 つの重要な機能は、レプリケーション ファクターです。この係数は、レプリカから作成されるコピーの数を示します。また、この機能は Cassandra の一貫性にも影響します。一般に、定足数との一貫性を確保する場合は、次のようにすることをお勧めします。
読み取りクォーラム + 書き込みクォーラム > レプリケーション係数
これには、次の値を使用するか、以下のような式でクォーラム数を調整できます。
クォーラム = 上限 ((すべての複製係数の合計 + 1 ) / 2 )
ストレージ システム
データはディスクまたはメモリに保存できます。基本的に、データを保持する構造は次のとおりです。
- コミットログ
- メムテーブル
- SSTables (ソートされた文字列テーブル):インデックス、サマリー、ブルーム フィルター、データ
- 行キャッシュとキー キャッシュ
- コミット ログ:実行されるアクションに関する情報が最初に書き込まれる場所です。
- データテーブル:実際のデータが格納されるファイルです。ファイルの各行には、削除時刻、削除のマークが付けられた時刻、および行内のデータがあります。削除のマークが付けられた時刻は、アクションが最初に実行された時刻を保持し、削除された時刻は完全に削除された時刻を保持します。データはmemtables から順次取得され、このプロセスが終了すると、コミット ログは消去されます。
- インデックス テーブル:関連するパーティション キーと、データ ファイル内のこの行の場所を示すデータ ペアで構成されます。
- 列ブルーム フィルター:行ごとに検索された列が存在するかどうかをチェックする偽陽性によって形成されるベクトルです。1 は存在を表し、0 は存在しないことを表します。
- Memtables:コミット ログに書き込まれたアクションが、フラッシュされる前に SSTable に書き込まれる一時テーブルです。コミット ログまたは memtables がいっぱいになるか、 memtables のフラッシュがトリガーされるまで、データはここに残ります。
- インデックスの概要:インデックス ファイル内のデータのインデックスの場所と、パーティション キーの範囲の開始値と終了値を一致させた概要ファイルです。この機能では、一定の間隔でインデックスが取得されます。このプロパティは
index_interval、列ファミリーを作成するときにパラメーターを使用して構成できます - ブルーム フィルター:キーがディスク上にあるかどうかを決定するベクトル。このベクトルは、偽陽性確率に基づいて生成されます。
bloom_filter_fp_chancecolumn-family の作成時にチェックでき、デフォルト値は 0.1 です。非常に高い値は、存在しない可能性のバイアスを増加させます。 - キー キャッシュ:データは
key:valueペアで格納されます。キーは主キーを保持しますが、値はデータ ファイル内の行のオフセットを保持します。 - 行キャッシュ:一定数の行がキャッシュとして保持されます。3 つの異なるパラメーターがあります。私たちが抱えたことのない状況、なし。ここで、すべてが保持される数値を指定します。すべてまたは特定の数の行が保持されます。
結論
Cassandra は、分散型、分散型、フォールト トレラント、列ベースの NoSQL データベースです。水平方向にスケーラブルで、低コストで、優れたパフォーマンスを発揮します。また、OLAP の非常に高速な読み取り、オープン ソース データベースの代替手段でもあり、CAP の定理によれば、これは AP 機能を備えたデータベースの代替手段です。
最後に、カサンドラはトロイの木馬王プリアモスとヘカベスの最も美しい娘と言われています。カサンドラは未来を見て修道女になりたいと思っています。アポロンはカサンドラを見た途端に感銘を受け、彼女と一緒にいたいと思った. その見返りに、それは彼に未来を見る能力を与えるでしょう. Cassandra はその申し出を受け入れ、Apollo は彼女にこの能力を与えました。しかし、修道女になりたいという彼女の願望が圧倒的だったので、カサンドラはアポロをだましました. これに怒ったアポロンはカサンドラを呪いました。彼女は未来を見ることができますが、彼女がそれを見たことを他の人に納得させることは決してなく、彼女は追放されます. 彼は、トロイア戦争が大敗をもたらすことを多く見たので、それをみんなに話しましたが、誰も納得させることができませんでした.

![とにかく、リンクリストとは何ですか?[パート1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































