1. 序章

学習パスを開始するために、クイックリファレンスガイドが必要になる場合があります。 特に、虎の巻はすべての重要な情報を含むドキュメントです。

このチュートリアルでは、Cassandraクエリ言語(CQL)の基本的な概念と、その過程で作成するチートシートを使用してそれらを適用する方法を学習します。

2. カサンドラの概要

Apache Cassandra は、オープンソース、NoSQL、および分散データストレージシステムです。 これは、1台のサーバーでのみ動作できるのではなく、複数のサーバーに分散していることを意味します。 また、高可用性とパーティションの許容度でも知られています。

言い換えると、Cassandraデータベースの設計は、CAP定理の「AP」に触発されています。

さらに、 Cassandraはマスターレスアーキテクチャであり、非常にスケーラブルであり、何よりも、簡単な障害検出とリカバリを提供します

3. データ型

通常、Cassandraは豊富なデータ型のセットをサポートしています。 これらには、カスタムタイプとともに、ネイティブタイプ、コレクションタイプ、ユーザー定義タイプ、およびタプルが含まれます。

3.1. ネイティブタイプ

ネイティブタイプは組み込みタイプであり、Cassandraのさまざまな定数をサポートします。

まず、文字列はプログラミングの世界で非常に人気のあるデータ型です。

CQLは、文字列に対して4つの異なるデータ型を提供します。

データ・タイプ サポートされる定数 説明
アスキー ストリング ASCII文字列
inet ストリング IPv4またはIPv6アドレス文字列
文章 ストリング UTF8でエンコードされた文字列
varchar ストリング UTF8でエンコードされた文字列

ブール値には、trueまたはfalseの2つの可能な値のいずれかがあります。

データ・タイプ サポートされる定数 説明
ブール値 ブール値 trueまたはfalse

blobデータ型を使用して、画像またはマルチメディアデータをバイナリストリームとしてデータベースに保存できます。

データ・タイプ サポートされる定数 説明
ブロブ ブロブ 任意のバイト

期間は、月、日、およびナノ秒を表す3つの符号付き整数です。

データ・タイプ サポートされる定数 説明
間隔 間隔 継続時間の値

Cassandraは、整数データ用にさまざまなデータ型を提供しています。

データ・タイプ サポートされる定数 説明
tinyint 整数 8ビットsignedint
smallint 整数 16ビットsignedint
int 整数 32ビットsignedint
bigint 整数 64ビット署名付きロング
変異体 整数 任意精度の整数
カウンター 整数 カウンター列(64ビット符号付き)

integerとfloatの場合、3つのデータ型があります。

データ・タイプ サポートされる定数 説明
10進数 整数、浮動小数点 可変精度の小数
ダブル 整数、浮動小数点 64ビット浮動小数点
浮く 整数、浮動小数点 32ビット浮動小数点

日付と時刻に関連するニーズに対して、Cassandraは次の3つのデータ型を提供します。

データ・タイプ サポートされる定数 説明
日にち 整数、文字列 日付値(時間なし)
時間 整数、文字列 時間値(日付なし)
タイムスタンプ 整数、文字列 タイムスタンプ(日付と時刻付き)

一般に、INSERTまたはUPDATEコマンドを使用している間は衝突を回避する必要があります。

データ・タイプ サポートされる定数 説明
uuid uuid UUID(任意のバージョン)
timeuuid uuid バージョン1のUUID

3.2. コレクションの種類

ユーザーがリレーショナルデータベースの1つのフィールドに対して複数の値を持っている場合、それらを別のテーブルに格納するのが一般的です。 たとえば、ユーザーは多数の銀行口座、連絡先情報、または電子メールアドレスを持っています。 したがって、この場合、すべてのデータを取得するには、2つのテーブル間に結合を適用する必要があります。

Cassandraは、コレクションタイプを使用して、データをグループ化して列にまとめて保存する方法を提供します。

これらのタイプを簡単に見てみましょう。

  • set –一意の値。 順序なしで保存
  • リスト–には重複する値を含めることができます。 注文が重要
  • マップ–データはキーと値のペアの形式で保存されます

3.3. ユーザー定義タイプ

ユーザー定義型を使用すると、1つの列に複数のデータフィールドを自由に付加できます。

CREATE TYPE student.basic_info (
  birthday timestamp,
  race text,
  weight text,
  height text
);

3.4. タプルタイプ

タプルは、ユーザー定義型の代替です。 角かっことコンマ区切り文字を使用して作成され、含まれる要素のタイプを区切ります。

単純なタプルのコマンドは次のとおりです。

-- create a tuple
CREATE TABLE subjects (
  k int PRIMARY KEY,
  v tuple<int, text, float>
);

-- insert values
INSERT INTO subjects  (k, v) VALUES(0, (3, 'cs', 2.1));

-- retrieve values
SELECT * FROM subjects;

4. CassandraCQLコマンド

CQLコマンドのいくつかのカテゴリを見てみましょう。

4.1. キースペースコマンド

最初に覚えておくべきことは、CassandraのキースペースはRDBMSのデータベースによく似ているということです。 これは、特にすべてのキースペーステーブルについて、レプリケーション戦略およびその他のオプションを定義するデータの最も外側のコンテナです。 これを念頭に置いて、適切な一般的なルールは、アプリケーションごとに1つのキースペースです。

関連するコマンドを見てみましょう。

指示 説明
キースペースの作成 CREATE KEYSPACE keyspace_name WITH Replication = {‘class’:’SimpleStrategy’、’replication_factor’:2}; キースペースを作成します。
DESCRIBEキースペース キースペースを説明します。 すべてのキースペースが一覧表示されます。
キースペースを使用する USE keyspace_name ; このコマンドは、クライアントセッションをキースペースに接続します。
ALTERキースペース ALTER KEYSPACE keyspace_name WITH REPLICATION = {‘class’:’SimpleStrategy’、’replication_factor’:3} AND DURABLE_WRITES = false; キースペースを変更します。
DROPキースペース DROP KEYSPACE keyspace_name ; キースペースを削除します。

4.2. テーブルコマンド

Cassandraでは、テーブルは列ファミリーとも呼ばれます。 主キーの重要性はすでにわかっています。 ただし、テーブルの作成時に主キーを定義する必要があります。

これらのコマンドを確認してみましょう。

指示 説明
CREATEテーブル CREATE TABLE table_name column_name UUID PRIMARY KEY、 column_name text、 column_name text、 column_name timestamp); テーブルを作成します。
他の机 ALTER TABLE table_name ADD column_name int; テーブルに新しい列が追加されます。
他の机 ALTER TABLE table_name ALTER column_name TYPE datatype ; 既存の列のデータ型を変更できます。
他の机 ALTER TABLE table_name WITHキャッシング={‘keys’:’NONE’、’rows_per_partition’: ‘1’}; このコマンドは、テーブルのプロパティを変更するのに役立ちます。
DROPテーブル DROP TABLE table_name ; テーブルをドロップします。
TRUNCATEテーブル TRUNCATE table_name ; これを使用して、すべてのデータを完全に削除できます。

4.3. インデックスコマンド

テーブル全体をスキャンして結果を待つ代わりに、インデックスを使用してクエリを高速化できます。 ただし、それを覚えておく必要があります Cassandraの主キーはすでにインデックスに登録されています。 したがって、同じ目的で再度使用することはできません。

コマンドを見てみましょう:

指示 説明
CREATEインデックス table_name column_name );のCREATE INDEX index_name インデックスを作成します。
インデックスを削除 DROP INDEX IF EXISTS index_name ; インデックスを削除します。

4.4. 基本コマンド

これらのコマンドは、テーブル値を読み取って操作するために使用されます。

指示 説明
入れる INSERT INTO table_name column_name1 column_name2 )VALUES( value1 value2 ); テーブルにレコードを挿入します。
選択する SELECT * FROM table_name ; このコマンドは、特定のテーブルからデータをフェッチするために使用されます。
どこ SELECT * FROM table_name WHERE column_name = value ; 述語のレコードを除外します。
アップデート UPDATE table_name SET column_name2 = value2 WHERE column_name1 = value1 ; レコードの編集に使用されます。
消去 DELETE識別子FROM table_name WHERE condition ; このステートメントは、テーブルから値を削除します。

4.5. その他のコマンド

Cassandraには、パーティションキーとクラスタリングキーの2種類のキーがあります。 パーティションキーは、データが保存されているノードを示します。

比較すると、クラスタリングキーは、パーティションキー内のデータの順序を決定します。

指示 説明
注文者 SELECT * FROM table_name WHERE column_name1 = value ORDER BY cloumn_name2 ASC; このためには、パーティションキーをWHERE句で定義する必要があります。 また、ORDER BY句は、順序付けに使用するクラスタリング列を表します。
GROUP BY SELECT column_name FROM table_name GROUP BY condition1 condition2 ; この句は、パーティションキーまたはパーティションキーとクラスタリングキーでのみサポートされます。
制限 SELECT * FROM table_name LIMIT 3; 大きなテーブルの場合、取得する行数を制限します。

5. オペレーター

Cassandraは、算術タイプと条件付きタイプの両方の演算子をサポートしています。 算術演算子の下には、加算、減算、乗算、除算、リマインダー、および否定に対して、それぞれ+、-、*、/、%、および–(単項)があります。

WHERE句はCassandraで重要です。 条件演算子は、特定のシナリオと制限とともにこの句で使用されます。 これらの演算子は、CONTAINS、CONTAINS KEY、IN、=、>、> =、<、および<=です。

6. 共通機能

間違いなく、関数は、集計またはスカラーのいずれかで、値を相互に変換する上で重要な役割を果たします。 このため、Cassandraは両方のカテゴリでいくつかのネイティブ関数を提供します。

それらの関数を見てみましょう:

  • ブロブ変換関数
  • UUIDおよびTimeuuid関数
  • トークン機能
  • WRITETIME関数
  • TTL機能
  • トークン機能
  • MIN()、MAX()、SUM()、AVG()

これらのネイティブ関数に加えて、ユーザーが関数と集計を定義することもできます。

7. 結論

この短い記事では、Cassandraのクエリ言語の構成要素が何であるかを見てきました。 最初に、それがサポートするデータ型とそれらを定義する方法を研究しました。 次に、データベース操作を実行するための一般的なコマンドを確認しました。 最後に、言語の演算子と機能について説明しました。