ポイント: Cassandra SQL バッチとマップは、CassandraのSQLコマンドとデータ型を説明し、従来のSQLとの類似性を強調しています。Cassandra SQLシェル、コレクションやマップなどの複雑なデータ型、および原子トランザクションのためのバッチの使用について説明しています。
- Cassandra SQLシェルコマンドと例を紹介します。
- コレクション、マップ、セットなどの複雑なデータ型を説明します。
- アプリケーションにおける原子操作のためのバッチの使用を詳述します。
SQLコマンドとデータ型は非常に多く、一つのブログ投稿ですべてを見ることはできないので、ここではいくつかを見ていきます。
以下の例を理解するためには、通常のOracleや他のRDBMSのSQLについての理解が必要です。Cassandra SQLはほとんど同じです。そしてCassandraを始めるために、こちらで書いたことを読んでください。すでにCassandraを知っていてインストールしている場合でも、そこからSQLを見て、ここで始めるテーブルとインデックスを設定するために役立ててください。
Cassandra SQL シェル
最初のステップは、Cassandra SQLコマンドラインを開くことです。次のコマンドを入力します: cqlsh.
以下のSQLを貼り付けてください。他のブログ投稿を見たことがあれば、ここにデータがあるでしょう。
select * from Library.book;
ここに別のクエリがあります。
(Cassandraはシングルクォートを使用する必要があることに注意してください。ダブルクォートを使用すると、エラー入力時に有効な代替案はありません。)
select ssn from Library.patron where checkedOut contains '1234';
コレクション、マップ、セット
Cassandraは、ユーザー定義オブジェクト、コレクション、マップ、セットを含む複雑なデータ型をサポートしています。
たとえば、次のように入力します:
マップ
describe library.patron;
テーブルを作成するために使用されたコマンドを見ることができます。以下は、その一部を省略したビューです。完全なビューは多くのシステム管理タイプのオプションを示すため、別の投稿で見ていきます。
以下では、checkedout列がtext型のセットであることがわかります。セットはユニークな値のコレクションです。
CREATE TABLE library.patron (
ssn int PRIMARY KEY,
checkedout set
)
マップは{key->value}形式で値を保存します。
まず、このキー空間を作成します。
CREATE KEYSPACE shopping
WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };
次に、購入したアイテムがマップであるeコマースアプリのためのショッピングカートを作成します。最初のフィールドは顧客の注文番号です。2番目は、彼らが購入したものとその量の組み合わせです。たとえば、{"shoes", 1}のようになります。
CREATE TABLE shopping.cart (
customerOrder int PRIMARY KEY,
items map
);
いくつかのデータを追加します。つまり、販売を行います:
そして、それをリストします:
INSERT INTO shopping.cart (customerOrder, items)
VALUES (
1,
{'toys' : 12, 'socks': 5});
そして、それをリストします:
select * from shopping.cart;
customerorder | items
---------------+--------------------------
1 | {'socks': 5, 'toys': 12}
バッチ
eコマースアプリケーションでは、バッチを使用したいでしょう。
バッチは原子性を保証します。RDBMSプログラマーは、これを参照整合性を保証すると言います。これは、バッチ内のSQL文のいずれかにエラーがある場合、どの文も適用されないことを保証します。
これは、たとえばショッピングカートアプリにとって重要です。販売トランザクションが成功した場合のみ、在庫を更新したいと思います。
それを示すために、まず在庫テーブルを作成し、そこにアイテムを入れます:
CREATE TABLE shopping.inventory (
item text PRIMARY KEY,
quantity int
);
INSERT INTO shopping.inventory (item, quantity) VALUES ('eggs', 48);
今、バッチで4つの卵を販売します:
BEGIN BATCH
INSERT INTO shopping.cart (customerOrder, items)
VALUES (
2,
{'eggs' : 4}
);
UPDATE shopping.inventory
SET quantity = 44
where item = 'eggs';
APPLY BATCH;
Cassandra ガイド
これらの投稿は私自身の意見であり、必ずしもBMCの立場、戦略、または意見を表すものではありません。