CREATE KEYSPACE

新しいキースペースとそのレプリカ配置ストラテジを定義します。

新しいキースペースとそのレプリカ配置ストラテジを定義します。

構文

CREATE(KEYSPACE | SCHEMA)IF NOT EXISTS keyspace_name WITH REPLICATION = map AND DURABLE_WRITES = ( true | false)

mapはマップ・コレクションで、JSON形式のリテラルの配列です。

{ literal :literal, literal :literal ... }

構文の凡例

  • 大文字はリテラルを意味する
  • 小文字は、リテラルでないことを意味する
  • イタリック体は指定が任意であることを意味する
  • パイプ(|)記号はORまたはAND/ORを意味する
  • 省略記号(...)は繰り返し可能を意味する
  • 範囲記号「(」および「)」はリテラルではなく、範囲を示す

この構文には、CQL文の終了となるセミコロンは含まれていません。

説明

CREATE KEYSPACEは、最上位レベルの名前空間を作成し、キースペース名、レプリカ配置ストラテジ・クラス、レプリケーション係数、およびキースペースのDURABLE_WRITESオプションを設定します。レプリカ配置ストラテジの詳細については、「Cassandra 2.2のレプリカ配置ストラテジ」または「Cassandra 2.1のレプリカ配置ストラテジ」を参照してください。

NetworkTopologyStrategyをレプリケーション・ストラテジとして構成する場合は、1つ以上の仮想データ・センターを設定します。あるいは、デフォルトのデータ・センターを使用します。データ・センターにはスニッチで使用されている名前と同じ名前を使用します。スニッチの詳細については、Cassandra 2.2のスニッチのドキュメントまたはCassandra 2.1のスニッチのドキュメントを参照してください。

ワークロードの種類に応じて、異なるノードを別々のデータ・センターに割り当てます。たとえば、Hadoopノードを1つのデータ・センターに割り当て、Cassandraリアルタイム・ノードを別のデータ・センターに割り当てます。ワークロードを分離することで、データ・センターごとに1種類のワークロードだけがアクティブになります。分離によって、パフォーマンスに影響を与えるさまざまなバッチ要件など、ワークロード間の非互換性の問題を防止できます。

以下のプロパティおよび値のマップは、2種類のキースペースを定義します。

{ 'class' :'SimpleStrategy', 'replication_factor' :<integer> }; { 'class' :'NetworkTopologyStrategy'[, '<data center>' :<integer>, '<data center>' :<integer>] . . . };
表 1. マップ・プロパティと値の表
プロパティ 値の説明
'class' 'SimpleStrategy'または'NetworkTopologyStrategy' 必須。新しいキースペースのレプリカ配置ストラテジ・クラスの名前です。
'replication_factor' <レプリカ数> クラスがSimpleStrategyの場合は必須ですが、それ以外の場合は使用しません。複数のノードにあるデータのレプリカの数です。
'<最初のデータ・センター名>' <レプリカ数> クラスがNetworkTopologyStrategyであり、最初のデータ・センターの名前を指定した場合は必須です。この値は、最初のデータ・センターの各ノードにあるデータのレプリカの数です。
'<次のデータ・センター名>' <レプリカ数> クラスがNetworkTopologyStrategyであり、2番目のデータ・センターの名前を指定した場合は必須です。この値は、データ・センターの各ノードにあるデータのレプリカの数です。
. . . . . . 任意で、指定のデータ・センターのレプリケーション係数を複数指定できます。

CQLプロパティ・マップ・キーは小文字である必要があります。たとえば、classとreplication_factorは正しい表記です。キースペース名は48文字以下の英数字とアンダースコアであり、名前の先頭は英字です。キースペース名は大文字と小文字が区別されません。名前の大文字と小文字を区別させるには、名前を二重引用符で囲みます。

CREATE KEYSPACEの代わりに、別名であるCREATE SCHEMAを使用できます。すでに存在しているキースペースを作成しようとすると、IF NOT EXISTSオプションを使用していない限りエラーが返されます。このオプションを使用すると、すでにそのキースペースが存在していれば、この文は何もしません。

SimpleStrategyクラスの設定の例

CREATE KEYSPACE文を作成するには、まず、キースペースの名前の後にWITH REPLICATIONキーワードと等号を付けて宣言します。二重引用符で囲まれていないキースペースの名前は、大文字と小文字が区別されません。次に、複数のデータ・センターに最適化されていないキースペースを作成するには、マップのclassの値にSimpleStrategyを指定します。replication_factorプロパティをコロンで区切り、中かっこで囲んで設定します。例:

CREATE KEYSPACE Excelsior WITH REPLICATION = { 'class' :'SimpleStrategy', 'replication_factor' : 3 };

Cassandraを評価するに当たってはSimpleStrategyでも十分です。実稼働環境で使用する場合、または混在ワークロードで使用する場合は、NetworkTopologyStrategyを使用します。

NetworkToplogyStrategyクラスの設定の例

NetworkTopologyStrategyもCassandraの評価に役立ちます。単一ノードのクラスターなどを使用した評価を目的としてNetworkTopologyStrategyを使用するには、クラスターのデフォルトのデータ・センター名を指定します。デフォルトのデータ・センター名を調べるには、nodetool statusを使用します。

$ nodetool status Datacenter:datacenter1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 127.0.0.1 46.59 KB 256 100.0% dd867d15-6536-4922-b574-e22e75e46432 rack1
Cassandraは、デフォルトのデータ・センター名としてdatacenter1を使用します。単一ノードのクラスターにNTSkeyspaceという名前のキースペースを作成する例を以下に示します。
CREATE KEYSPACE NTSkeyspace WITH REPLICATION = { 'class' :'NetworkTopologyStrategy', 'datacenter1' : 1 };

実稼働環境でデータ・センターにNetworkTopologyStrategyを使用するには、デフォルトのスニッチであるSimpleSnitchをネットワーク対応スニッチに変更して、スニッチ・プロパティ・ファイルで1つ以上のデータ・センター名を定義したら、これらのデータ・センター名を使用してキースペースを定義する必要があります。これを行わないと、Cassandraは、テーブルへのデータの挿入などの書き込み要求を完了するためにノードを検索できません

PropertyFileSnitchなどのネットワーク対応スニッチを使用するようにCassandraを構成したら、cassandra-topology.propertiesファイルでデータ・センターとラックの名前を定義します。

マップのclassの値にNetworkTopologyStrategyを使用するCREATE KEYSPACE文を作成します。データ・センター名とデータ・センターあたりのレプリカの数で構成される1つ以上のキーと値のペアを設定します。これはコロンで区切り、中かっこで囲んで設定します。例:

CREATE KEYSPACE "Excalibur" WITH REPLICATION = {'class' :'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 2};

この例では、dc1という名前のデータ・センターの3つのレプリカと、dc2という名前のデータ・センターの2つのレプリカを設定しています。使用するデータ・センター名は、使用しているクラスター構成されたスニッチによって異なります。マップで定義されたデータ・センター名と、使用しているスニッチによって認識されたデータ・センター名の間には相関関係があります。データ・センター名とノードのラック位置が不明な場合は、nodetool statusコマンドでそれらを出力します。

DURABLE_WRITESの設定

CREATE KEYSPACEコマンドのマップ指定の後にDURABLE_WRITESオプションを設定できます。falseに設定すると、キースペースに書き込まれたデータはコミット・ログに記録されません。データを失う危険性があるため、このオプションを使用する際は気を付けてください。SimpleStrategyを使用して、キースペースでこの属性を設定しないでください。

CREATE KEYSPACE Risky WITH REPLICATION = { 'class' :'NetworkTopologyStrategy', 'datacenter1' :3 } AND DURABLE_WRITES = false;

作成したキースペースの確認

キースペースが作成されたことを確認します。

SELECT * FROM system.schema_keyspaces;
keyspace_name | durable_writes | strategy_class | strategy_options ---------------+----------------+------------------------------------------------------+---------------------------- excelsior | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"3"} Excalibur | True | org.apache.cassandra.locator.NetworkTopologyStrategy | {"dc2":"2","dc1":"3"} risky | False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1":"1"} system | True | org.apache.cassandra.locator.LocalStrategy | {} system_traces | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"1"} (5 rows)

Cassandraは、キースペースの作成に引用符が使用されていなかったためexcelsiorキースペースを小文字に変換し、Excaliburについては引用符が使用されていたための先頭の大文字を維持しました。