アーキテクチャーの概要

DataStax Enterpriseを理解して使用するための基本情報。

cassandra.yaml

cassandra.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/cassandra/cassandra.yaml
tarボール・インストール installation_location/resources/cassandra/conf/cassandra.yaml

このページでは、DataStax Enterpriseを理解して使用するための基本情報について説明します。DataStax Enterpriseはリレーショナル・データベースとは異なるため、このページの各セクションを読んで理解しておくと、多くの時間を節約できます。

DataStax Enterpriseの仕組み

DataStax Enterprise(DSE)バージョン6.7は、ハイブリッド・クラウド向けに設計された業界で最も優れた分散クラウド ・データベースです。オンプレミス、リージョン全体、クラウドなど、必要に応じてどこでも実行できる唯一のActive Everywhere(どこでもアクティブ)なデータベース・プラットフォームを容易にデプロイします。Apache Cassandraの優れたディストリビューションのすべての機能と共に、プロダクション・クラウド・アプリケーションに必要なエンタープライズ・ツールや専門家のサポートを利用できます。

DSEは、単一障害点なしで複数のノードにわたってビッグ・データのワークロードを処理するように設計されています。そのアーキテクチャーは、システムおよびハードウェアには障害が発生するものだということを前提にしています。

DSEは、クラスター内のすべてのノードにデータが分散されるピアツーピア分散システムを同種ノードに横断的に採用することによって障害の問題に対処します。各ノードは、ピアツーピアのゴシップ通信プロトコルを使用して、クラスター全体でそれ自体および他のノードに関する状態情報を頻繁に交換します。各ノードでシーケンシャルに書き込まれるコミット・ログにより、データの永続性を保証するために書き込みアクティビティが捕捉されます。データは、その後インデックスが付けられ、memtableと呼ばれるライトバック・キャッシュに似たインメモリー構造に書き込まれます。

メモリー構造が満杯になると、データはSSTableデータ・ファイル形式でディスクに書き込まれます。すべての書き込みは自動的にパーティションされ、クラスター全体にレプリケーションされます。DSEは、コンパクションを使用して、定期的にSSTableを統合し、トゥームストーンによって削除とマークされた古いデータを破棄します。トゥームストーンは、カラムが削除されることを示す、行内のマーカーです。コンパクションの際に、マークが付いたカラムは削除されます。クラスター全体のデータの整合性を確保するために、さまざまなリペア・メカニズムが採用されています。

DSEデータベースは、行ストア・データベースにパーティションされます。ここで、行は必要なプライマリ・キーを使用してテーブルに構成されています。データベースのアーキテクチャーでは、権限を与えられたすべてのユーザーが、CQL言語を使用して任意のデータ・センターの任意のノードに接続し、データにアクセスできます。使い勝手がいいように、CQLはSQLと同じような構文を使用し、テーブル・データと連動します。開発者は、CQLシェル(cqlsh)コマンドDataStax Studioを介して、およびアプリケーション言語用のドライバーを使用して、CQLにアクセスできます。通常、クラスターには、さまざまなテーブルで構成されたアプリケーションごとに1つのキースペースがあります。

クライアントの読み取りまたは書き込み要求は、クラスター内の任意のノードに送信できます。要求を持つクライアントがノードに接続されると、そのノードは、クライアントの特定の操作のコーディネーター・ノードとしての役目を果たします。コーディネーターは、クライアント・アプリケーションと、要求されたデータを所有するノード間で、代理人としての役目を果たします。コーディネーターは、クラスターがどのように構成されているかに基づいて、リングのどのノードが要求を受け取るかを決定します。

主な構成要素

ノード
データの格納先。これは基本的なデータベース・インフラストラクチャー・コンポーネントです。
クラスター
データを格納するための分散ノードのグループ。クラスターは、1つのノード、1つのデータ・センター、または複数のデータ・センターを持つことができます。
データ・センター
レプリケーションを目的にクラスター内でまとめて構成された関連ノードのグループ。データ・センターは、物理的なデータ・センターまたは仮想データ・センターが可能です。別々のデータ・センターを使用することで、トランザクションが他のワークロードの影響を受けるのを防ぎ、レイテンシーを低くします。レプリケーション係数に基づいて、複数のデータ・センターにデータが書き込まれます。データ・センターが複数の物理的な所在地をまたぐことがあってはなりません。
通常、各データ・センターは1つのノード・タイプのみを含みます。ノード・タイプには以下があります。
  • トランザクション:以前は、Cassandraノードと呼ばれていました。
  • DSE Graph:高度に接続されたデータの管理用、分析用、検索用のグラフ・データベース。
  • DSE Analytics:Apache Sparkと統合。
  • DSE Search:Apache Solrと統合。
  • DSE SearchAnalytics:DSE SearchがDSE Analyticsジョブ内でクエリーします。
レプリケーション
複数のノードにあるデータのコピーを格納するプロセス。レプリケーションにより、信頼性とフォールト・トレランスが確保されます。コピーの数はレプリケーション係数により設定されます。
コミット・ログ
すべてのデータは、永続性のためにまずコミット・ログに書き込まれます。そのすべてのデータがSSTableにフラッシュされた後、コミット・ログをアーカイブ、削除、または再利用できます。
SSTable
ソート済み文字列テーブル(SSTable)は、データベースがmemtableを定期的に書き込む不変データ・ファイルです。SSTableは追加書き込みのみで、ディスクにシーケンシャルに格納され、データベース・テーブルごとに維持されます。
トゥームストーン
カラムが削除されることを示す、行内のマーカーです。コンパクションの際に、マークが付いたカラムは削除されます。
CQLテーブル
テーブル行単位でフェッチされる、順序付きのカラムの集まりです。テーブルはカラムから構成され、プライマリ・キーを持ちます。

DataStax Enterpriseを構成するための主なコンポーネント

ゴシップ
DSEクラスターに属する他のノードの場所と状態の情報を探して共有するピアツーピア通信プロトコルです。ゴシップ情報は、ノードが再起動されるとすぐに使用できるように、各ノードによってローカルに保持されます。
パーティショナー
パーティショナーは、ロード・バランス機能のために、クラスター内のノード全体にデータを均等に分散します。
具体的には、パーティショナーは、データの一部の最初のレプリカを受け取るノード、および他のレプリカをクラスター内の他のノードに分散する方法を決定します。データの各行は、プライマリ・キーによって一意に識別されます。プライマリ・キーは、そのパーティション・キーと同じでも構いませんが、他のクラスター化カラムも含めることができます。パーティショナーはハッシュ関数で、行のプライマリ・キーからトークンを導き出します。パーティショナーはトークン値を使用して、クラスター内のどのノードがその行のレプリカを受け取るかを決定します。Murmur3Partitionerは、新しいDSEクラスター用のデフォルトのパーティション分割ストラテジであり、新しいクラスターではほとんどの場合に正しい選択肢となります。
レプリケーション係数
レプリケーションは、複数のノードにあるデータのコピーを格納するプロセスです。レプリケーションにより、信頼性とフォールト・トレランスが確保されます。コピーの数はレプリケーション係数により設定されます。
レプリケーション係数1は、各行のコピーが1つしかなく、1つのノード上にあることを意味します。レプリケーション係数2は、各行のコピーが2つあり、それぞれ異なるノード上にあることを意味します。すべてのレプリカの重要性は同じで、プライマリ・レプリカやマスター・レプリカといった区別はありません。各データ・センターにレプリケーション係数を定義します。通常は、レプリケーション・ストラテジを1よりも大きく、クラスターのノード数以下に設定します。
レプリカ配置ストラテジ
レプリケーション・ストラテジは、レプリカをどのノードに配置するかを決定します。データの最初のレプリカは、単に最初のコピーであるということだけです。いかなる意味合いにおいても独自性を持つわけではありません。将来拡張する必要が生じたときに、複数のデータ・センターに拡張するのが簡単なため、ほとんどのデプロイには、NetworkTopologyStrategyを強く推奨します。
キースペースを作成する際、レプリカ配置ストラテジおよびレプリカ数を定義する必要があります。
スニッチ
スニッチは、ノードのIPアドレスから、ラックやデータ・センターなどの物理位置および仮想位置にマップします。スニッチは、データベースに対してネットワーク・トポロジーを伝えることで、要求を効率的にルーティングさせ、マシンをデータ・センターおよびラックにグループ分けしてデータベースがレプリカを分散できるようにします。
クラスターを作成するときは、スニッチを構成する必要があります。どのスニッチも、パフォーマンスを監視し、読み取りに最適なレプリカを選択する動的スニッチ層を使用します。動的スニッチはデフォルトで有効になっており、ほとんどのデプロイで使用が推奨されます。 cassandra.yaml構成ファイルで、各ノードに対する動的スニッチしきい値を構成します。
デフォルトのDseSimpleSnitchは、データ・センターまたはラック情報を認識しません。単一データ・センターへのデプロイ時またはパブリック・クラウドの単一ゾーンに使用します。プロダクション環境にはGossipingPropertyFileSnitchを推奨します。これはノードのデータ・センターとラックを定義し、この情報をその他のノードに伝搬するためにゴシップを使用します。
cassandra.yaml構成ファイル
クラスターの初期化プロパティの設定、テーブルのキャッシング・パラメーター、調整およびリソース利用のプロパティ、タイムアウト設定、クライアント接続、バックアップ、およびセキュリティのためのメインの構成ファイルです。デフォルトでは、ノードは管理対象のデータをcassandra.yaml ファイルに設定されているディレクトリーに格納するように構成されます。
プロダクション・クラスター・デプロイでは、commitlogディレクトリーをデータ・ファイル・ディレクトリーとは異なるディスク・ドライブに変更することを推奨します。
dse.yaml構成ファイル
DSE Advanced Security(DSE拡張セキュリティ)、DSE Search、DSE Graph、およびDSE Analytics用の構成ファイル。
システム・キースペース・テーブルのプロパティ
ストレージ構成属性は、プログラムで、またはCQLシェル(cqlsh)などのクライアント・アプリケーションを使用して、キースペースまたはテーブルごとに設定します。
データのロードとアンロード
DataStax Bulk Loaderツールを使用して、DSEデータを効率的にロードおよびアンロードします。このツールは、別のDSEまたはApache CassandraクラスターからDSEにデータを移行します。
  • Cassandra 2.1以降のすべてのデータ・ソースからデータをアンロードします
  • DSE 5.0以降にデータをロードします
  • CSV形式とJSON形式をサポートします

データ・モデリングの基本概念

データ・モデルの設計
データ・モデルの設計は、リレーショナル・データベースで行うような実体と関係のモデリングではなく、実行するクエリーに基づいています。
キースペース
リレーショナル・データベースのスキーマに類似した、データの最も外側のグループ化。すべてのテーブルはキースペースに属します。キースペースは、レプリケーション用の定義コンテナーです。
テーブル
テーブルにはプライマリ・キーに基づいてデータが格納されます。プライマリ・キーは、パーティション・キーとオプションのクラスター化カラムで構成されます。マテリアライズド・ビューは、カーディナリティが高いデータ用に追加することもできます。
  • パーティション・キーは、データが格納されるノードを定義し、データを論理グループに分割します。データを均等に分散し、特定のクエリーを満たすパーティション・キーを定義します。複数のパーティション間でのクエリーと書き込み要求は、可能なら避けてください。
  • クラスター化カラムは、パーティション内での行のソート順序を定義します。クラスター化カラムを定義するときは、データの目的を考慮してください。たとえば、日付順にソートされた最新のトランザクションを降順に取得します。
  • マテリアライズド・ビューとは、別のテーブルのデータから、新しいプライマリ・キーと新しいプロパティを使用して構築したテーブルのことです。クエリーはプライマリ・キー定義によって最適化されます。マテリアライズド・ビューのデータは、ソース・テーブルを変更すると自動的に更新されます。
注: 以前のバージョンのDataStax EnterpriseとApache Cassandraでは、カラム・ファミリーは多くの点でテーブルと同義でした。
1. テーブル
データ・モデリングに関するその他の情報