記事ディレクトリ
DockerでCassandraイメージをプルする
ターミナルで次のコマンドを入力します:(Dockerがインストールされている場合)
docker pull cassandra
Dockerネットワークを作成する
Dockerには次のネットワークタイプがあります。
bridge:多由于独立container之间的通信
host: 直接使用宿主机的网络,端口也使用宿主机的
overlay:当有多个docker主机时,跨主机的container通信
macvlan:每个container都有一个虚拟的MAC地址
none: 禁用网络
デフォルトのネットワーク:デフォルトでは、Dockerはブリッジ、ホスト、およびnoneネットワークを確立します。
docker network ls
NETWORK ID NAME DRIVER SCOPE
cdc35147c3ae bridge bridge local
0418807a829c host host local
a4b53107ae28 none null local
作成コマンド
docker network create [OPTIONS] NETWORK
注:このコマンドを使用するには、DockerクライアントとデーモンAPIの両方が1.21以上である必要があります。docker versionコマンドを使用して、クライアントとデーモンのAPIバージョンを確認します。
オプションパラメータ
名前、略記 | 説明文 |
---|---|
--attachable |
コンテナの手動添付を有効にする |
--aux-address |
ネットワークドライバーが使用する補助IPv4またはIPv6アドレス |
--config-from |
構成のコピー元のネットワーク |
--config-only |
構成のみのネットワークを作成する |
--driver , -d |
ネットワークを管理するためのドライバー |
--gateway |
マスターサブネットのIPv4またはIPv6ゲートウェイ |
オプションパラメータが追加されていない場合、デフォルトでブリッジネットワークが使用されます
Cassandraインスタンスを作成する
docker run --name some-cassandra --network some-network -d cassandra:tag
some-cassandraを名前を付けたいコンテナーの名前に置き換え、some-networkを先ほど作成したネットワークに置き換え、Cassandraのバージョン番号にタグを付け、デフォルトで最新に置き換えます
たとえば、次のとおりです。
docker run --name ctest --network test -d cassandra:latest
cqlshに接続する
docker run -it --network some-network --rm cassandra cqlsh some-cassandra
docker run -it --network test --rm cassandra cqlsh ctest
Connected to Test Cluster at ctest:9042.
[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
CQL言語
Cassandraクエリ言語(cql)は、ユーザーがSQLと同様の言語を使用してCassandraにクエリを実行できるようにする宣言型言語です。cqlはCassandraバージョン0.8で導入され、現在Cassandraからデータを取得するための推奨される方法です。CQLが導入される前は、RPCベースのAPIを保存することが、Cassandraからデータを取得するための望ましい方法でした。cqlの主な利点の1つはSQLとの類似性であり、Cassandraの学習の難しさを軽減するのに役立ちます。CQLは、Cassandraの内部ストレージ構造ではなく、単純なAPIと考えることができます。
CQLの基本
最初にいくつかの基本的なCQL構造を理解してから、実際的な例を入力してみましょう。
キースペース
キースペースはRDBMSデータベースに似ています。アプリケーションデータのコンテナです。データベースと同様に、キースペースには名前と関連する属性のセットが必要です。キースペースを定義するときに設定する必要がある2つの重要な属性は、レプリケーション係数とレプリケーション戦略です。
列ファミリー/テーブル
列ファミリー/テーブルはRDBMSテーブルに似ています。キースペースは、多くの列ファミリー/テーブルで構成されています。
主キー/テーブル
主キーにより、ユーザーはデータの「内部行」を一意に識別できます。主キーは2つの部分で構成されます。行/パーティションキーとクラスターキー。行/パーティションキーはデータが保存されるノードを決定し、クラスターキーは特定の行のデータのソート順を決定します。
最初に注意する点は、cqlはクエリに適用できる述語を厳しく制限することです。これは基本的に、間違ったクエリを防ぎ、ユーザーにデータモデルを慎重に検討させることを目的としています。以下は、SQLで頻繁に使用されますが、cqlでは使用できないコンテンツのリストです。
- 任意のwhere句はありません
。cqlでは、述語には主キーで指定された列のみを含めることができます。 - 接続構造なし-データ
を列ファミリー間で接続することはできません。2つの列ファミリー間でデータを接続することはお勧めしません。そのため、cqlには接続構造はありません。 - グループ化基準なし
-同じデータをグループ化することはできません。 - 任意のORDER BY句はありません。ORDERBYは
クラスター化された列にのみ適用できます。
cqlを学ぶ最良の方法は、cqlクエリを記述することです。cqlはCassandraとやり取りする非常に単純な方法ですが、基礎となる内部の作業を理解していないと、誤用されやすくなります。基礎となる構造を理解することは、CQLをマスターするための鍵です。
CQLの例
cqlsh> CREATE KEYSPACE animalkeyspace
WITH REPLICATION = { 'class' : 'SimpleStrategy' ,
'replication_factor' : 1 };
注文WITH REPLICATION
部分には特に注意してください。これは、animalkeyspaceが単純な複製戦略を使用する必要があり、animalkeyspaceに挿入されたすべてのデータのコピーが1つしかないことを示しています。これはデモンストレーションに最適ですが、あらゆるタイプのテストまたは実稼働環境に実用的な選択肢ではありません。
次に、列ファミリーを作成します。列ファミリーを作成するには、「USEコマンド」を使用してanimalkeyspaceに移動する必要があります。USEコマンドを使用すると、クライアントは特定のキースペースに接続できます。つまり、それ以降のすべてのcqlコマンドは、選択したキースペースのコンテキストで実行されます。cqlshプロンプトで次のコマンドを実行して、現在のクライアントをanimalkeyspaceに接続します。
cqlsh> use animalkeyspace;
cqlsh:animalkeyspace>
cqlshプロンプトが「cqlsh>
」から「」に変わりcqlsh:animalkeyspace>
、現在接続されているキースペースを視覚的に思い出させることに注意してください。
次に、サル関連のデータを格納するための列ファミリー/テーブルを作成しましょう。テーブルを定義するには、CREATE TABLE
コマンドを使用する必要があります。主キーに特に注意してください。主キーは2つの部分で構成されます。つまり、パーティション/行キーとクラスターキーです。主キーの最初の列はパーティションキーです。残りの列は、クラスターキーを決定するために使用されます。複合パーティションキー(複数の列で構成されるパーティションキー)は、クラスター列の前に追加のかっこのセットを使用して定義できます。行キーはクラスター内のデータの分散に役立ち、クラスターキーは行に格納されるデータの順序を決定します。したがって、テーブルを設計するときは、行キーをクラスター内のデータを均等に分散するためのツールと考え、クラスターキーは行内のデータの順序を決定するのに役立ちます。クエリモードは行に格納されたデータの並べ替えに使用されるため、クラスターキーに大きな影響を与えます。クラスタキーはオプションであることに注意してください。
cqlshプロンプトで次のコマンドを実行して、monkeyテーブルを作成してみましょう。
cqlsh:animalkeyspace> CREATE TABLE Monkey (
identifier uuid, species text, nickname text, population int, PRIMARY KEY ((identifier), species));
上記の表ではidentifier
、パーティションキーとspecies
クラスターキーを選択しています。
次のinsertステートメントを使用して、上記の列ファミリーに行を挿入します。
cqlsh:animalkeyspace> INSERT INTO monkey (identifier, species, nickname, population)
VALUES ( 5132b130-ae79-11e4-ab27-0800200c9a66,
'Capuchin monkey', 'cute', 100000);
ここで、Monkeyテーブルに行を作成して挿入した後に何が起こったかを確認してみましょう。
cqlsh:animalkeyspace> Select * from monkey;
identifier | species | nickname | population
--------------------------------------+-----------------+----------+------------
5132b130-ae79-11e4-ab27-0800200c9a66 | Capuchin monkey | cute | 100000
(1 rows)
Monkeyテーブルに挿入されたデータをJSONに変換すると、次の結果が得られます。
[
{
"key": "5132b130ae7911e4ab270800200c9a66", // 行/分区键
"columns": [
[
"Capuchin monkey:", // 集群键。注意,集群键没有任何关联的数据。键和数据相同。
"",
1423586894518000 // 创建此内部列时记录的时间戳。
],
[
"Capuchin monkey:nickname", // nickname internal列的头。注意,对于每个额外的内部列,集群键总是有前缀。
"cute", // 实际数据
1423586894518000
],
[
"Capuchin monkey:population", // population内部列的头
"100000", // 实际数据
1423586894518000
]
]
}
]
Monkeyテーブルに挿入されたデータは、次のマップとして表示できます。
パーティションキー5132B130AE7911E4AB270800200C9A66
は行キーであり、外部にマップされたキーであることに注意してください。Capuchin monkey:
クラスタキーであり、内部ソートマップの最初のエントリです。ソートマップの最初のエントリには、キーとしてデータがなく、データは同じです。後続のマッピングエントリは、列名の後にクラスターキーを追加することでキーを作成します。Capuchin monkey:nickname
これはnickname
、クラスターキー+列ヘッダーの結果です。データセクションには、列の実際のデータが含まれます。
次の図は、cql行の論理マップ、結果のsstable、およびソートマップの間のリンクを直感的に説明しています。
次に、cqlをさらに2行挿入します。挿入された最初の行には同じパーティションキーがありますが、クラスターキーが変更されます。挿入された2番目の行には、新しいパーティションキーとクラスターキーがあります。
cqlsh:animalkeyspace> INSERT INTO monkey (identifier, species, nickname, population)
VALUES ( 5132b130-ae79-11e4-ab27-0800200c9a66, 'Small Capuchin monkey', 'very cute', 100);
INSERT INTO monkey (identifier, species, nickname, population)
VALUES ( 7132b130-ae79-11e4-ab27-0800200c9a66, 'Rhesus Monkey', 'Handsome', 100000);
お問い合わせください:
cqlsh:animalkeyspace> Select * from monkey;
identifier | species | nickname | population
--------------------------------------+-----------------------+-----------+------------
5132b130-ae79-11e4-ab27-0800200c9a66 | Capuchin monkey | cute | 100000
5132b130-ae79-11e4-ab27-0800200c9a66 | Small Capuchin monkey | very cute | 100
7132b130-ae79-11e4-ab27-0800200c9a66 | Rhesus Monkey | Handsome | 100000
(3 rows)
jsonに変換すると、次の結果が得られます。
[
{
"key": "5132b130ae7911e4ab270800200c9a66",
"columns": [
[
"Capuchin monkey:",
"",
1424557973603000
],
[
"Capuchin monkey:nickname",
"cute",
1424557973603000
],
[
"Capuchin monkey:population",
"100000",
1424557973603000
],
[
"Small Capuchin monkey:",
"",
1424558013115000
],
[
"Small Capuchin monkey:nickname",
"very cute",
1424558013115000
],
[
"Small Capuchin monkey:population",
"100",
1424558013115000
]
]
},
{
"key": "7132b130ae7911e4ab270800200c9a66",
"columns": [
[
"Rhesus Monkey:",
"",
1424558014339000
],
[
"Rhesus Monkey:nickname",
"Handsome",
1424558014339000
],
[
"Rhesus Monkey:population",
"100000",
1424558014339000
]
]
}
]
この時点で、データがマップとして表示することができるの下モンキーテーブルに挿入され
-CQL源、例えば、クリック元を表示するために、ここ。