概要
Aerospike では aql (Aerospike Query Language) と呼ばれる SQL に近いコマンドラインインターフェースがあります。
aql を使って CRUD処理などのデータ操作を試してみます。
前提
Aerospike インストール済み環境
Aerospike を Ubuntu 15.04 にインストールする手順
用語
Aerospike と RDB は用語が違うので、混乱しないようにまとめておきます。
Aerospike | RDB |
---|---|
Namespace | Database |
Set | Table |
Record | Row |
Bin | Column |
aql 起動
Aerospike のサービスが起動していることを確認し、以下のコマンドを実行します。
$ aql
Aerospike Query
Copyright 2013-2015 Aerospike. All rights reserved.
aql>
aql のプロンプトが表示されます。
CRUD
以下のような構成の fruits という Set を aql で作ってみます。
PK(primary key) | Name | Price | Description |
---|---|---|---|
1 | Ringo | 100 | from Aomori |
2 | Mikan | 50 | from Wakayama |
3 | Nashi | 150 | from Tottori |
4 | Dragon Fruit | 300 | from Ishigaki-island |
なお、Namespace は test とします。
※Aerospike インストール時にデフォルトで作成されています。
データ生成
insert文でデータを生成します。
insert前にcreate table的な処理は不要です。
aql> INSERT INTO test.fruits (PK, Name, Price, Description) VALUES (1, 'Ringo', 100, 'from Aomori')
OK, 1 record affected.
同様に以下のレコードを追加します。
aql> INSERT INTO test.fruits (PK, Name, Price, Description) VALUES (2, 'Mikan', 50, 'from Ehime')
aql> INSERT INTO test.fruits (PK, Name, Price, Description) VALUES (3, 'Nashi', 150, 'from Tottori')
aql> INSERT INTO test.fruits (PK, Name, Price, Description) VALUES (4, 'Dragon Fruit', 300, 'from Ishigaki-island')
aql> INSERT INTO test.fruits (PK, Name, Price, Description) VALUES (5, 'starfruit', 300, 'from Miyako-island')
データ更新
update文は無いため、insert文で PK を指定し、データを更新します。
aql> INSERT INTO test.fruits (PK, Description) VALUES (2, 'from Wakayama')
OK, 1 record affected.
データ削除
delete文でデータを削除します。PK を指定する必要があります。
aql> DELETE FROM test.fruits WHERE PK = 5
OK, 1 record affected.
データ読み取り
select文でデータを参照します。
aql> SELECT * FROM test.fruits
+----------------+-------+------------------------+
| Name | Price | Description |
+----------------+-------+------------------------+
| "Dragon Fruit" | 300 | "from Ishigaki-island" |
| "Nashi" | 150 | "from Tottori" |
| "Mikan" | 50 | "from Wakayama" |
| "Ringo" | 100 | "from Aomori" |
+----------------+-------+------------------------+
4 rows in set (0.014 secs)
意図した通りにデータを準備し、参照することができました。
参照結果に PK が表示されていない
Aerospike では、キーをハッシュ化して利用するため、デフォルトでは Primary Key をそのまま参照することができません。
キーを参照するには、キーをそのまま保存するオプションを利用する必要がありますが、 aql 単体ではそのような機能はないようです 。
(2016/6/30 追記)
ver.3.8.2.2 以降、aql起動時に -K
オプションを指定することで、キーをそのまま保存できるようです。
データ読み取り(Bin単位で絞込)
Bin単位でwhere句による絞込を行うには、別途インデックスを作成する必要があります。
Name, Price の Bin にそれぞれ fruit_name_index, fruit_price_index というインデックスを作成してみます。
aql> CREATE INDEX fruit_name_index ON test.fruits (Name) STRING
OK, 1 index added.
aql> CREATE INDEX fruit_price_index ON test.fruits (Price) NUMERIC
OK, 1 index added.
インデックス作成後、絞り込みを実行できます。
aql> SELECT * FROM test.fruits WHERE Name = 'Nashi'
+---------+-------+----------------+
| Name | Price | Description |
+---------+-------+----------------+
| "Nashi" | 150 | "from Tottori" |
+---------+-------+----------------+
1 row in set (0.000 secs)
aql> SELECT * FROM test.fruits WHERE Price BETWEEN 0 and 120
+---------+-------+-----------------+
| Name | Price | Description |
+---------+-------+-----------------+
| "Ringo" | 100 | "from Aomori" |
| "Mikan" | 50 | "from Wakayama" |
+---------+-------+-----------------+
2 rows in set (0.000 secs)
その他の操作
Namespaceリスト
Namespace のリストを表示します。
aql> SHOW NAMESPACES
+------------+
| namespaces |
+------------+
| "test" |
| "bar" |
+------------+
2 rows in set (0.001 secs)
Setリスト
すべての Set を表示します。
aql> SHOW SETS
+-----------+------------------+----------------+-------------------+----------------+---------+----------+------------+
| n_objects | disable-eviction | set-enable-xdr | stop-writes-count | n-bytes-memory | ns_name | set_name | set-delete |
+-----------+------------------+----------------+-------------------+----------------+---------+----------+------------+
| 4 | "false" | "use-default" | 0 | 275 | "test" | "fruits" | "false" |
+-----------+------------------+----------------+-------------------+----------------+---------+----------+------------+
1 row in set (0.000 secs)
OK
Binリスト
すべての Bin を表示します。
aql> SHOW BINS
aql> show bins
+-------+---------------+-------+-----------+
| quota | bin | count | namespace |
+-------+---------------+-------+-----------+
| 32768 | "Name" | 3 | "test" |
| 32768 | "Price" | 3 | "test" |
| 32768 | "Description" | 3 | "test" |
+-------+---------------+-------+-----------+
3 rows in set (0.000 secs)
OK
Indexリスト
すべての Index を表示します。
aql> SHOW INDEXES
+--------+---------+-----------+----------+-------+---------------------+---------+------------+-----------+
| ns | bin | indextype | set | state | indexname | path | sync_state | type |
+--------+---------+-----------+----------+-------+---------------------+---------+------------+-----------+
| "test" | "Price" | "NONE" | "fruits" | "RW" | "fruit_price_index" | "Price" | "synced" | "NUMERIC" |
| "test" | "Name" | "NONE" | "fruits" | "RW" | "fruit_name_index" | "Name" | "synced" | "STRING" |
+--------+---------+-----------+----------+-------+---------------------+---------+------------+-----------+
2 rows in set (0.000 secs)
OK