[NoSQL]Cassandra入門③ – コンソールから利用してみる

Facebook にシェア
このエントリーをはてなブックマークに追加
[`livedoor` not found]
LinkedIn にシェア
[`evernote` not found]
GREE にシェア
LINEで送る

Cassandraのコンソールを起動してみる

前回まででCassandraの起動まで行いました。インストールと起動方法はこちら

コンソールからCassandraにアクセスしてみたいと思います。

$CASSANDRA_HOME/bin/cassandra-cli
Connected to: "Test Cluster" on 127.0.0.1/9160
Welcome to Cassandra CLI version 1.2.5

Type 'help;' or '?' for help.
Type 'quit;' or 'exit;' to quit.

[default@unknown]

筐体が別のホストに接続したい場合は「-host」オプションを、別ポートで起動させている場合は「-port」オプションを指定して接続してください。

終了するには「exit or quit」

[default@unknown] exit;

キースペースを作成してみる

以下のコマンドを実行してください。DEMOという名前でレプリカ配置戦略をSimpleStrategyにしてキースペースを作成しています。

[default@unknown] CREATE KEYSPACE demo
with placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy'
and strategy_options = [{replication_factor:1}];
ab7604a3-456e-39dd-842d-91425c9072cf

レプリカ配置戦略とは、ノード間のレプリケーション戦略をさします。

レプリカ配置戦略 概要
Simple Strategy ネットワークトポロジを意識せずにデータセンター内にレプリカを配置する
Old Network Topology Strategy 主に同一データセンター内の異なるラックをまたがってデータを分散させるために利用されます。やや高いレイテンシを許容範囲として、その代わりに高可用性を保証したい場合にこのストラテジーを利用します。
Network Topology Strategy 異なるデータセンターをまたがってデータを分散させるために利用されます。

カラムファミリを作成してみる

[default@unknown] USE demo;
Authenticated to keyspace: demo
[default@demo] CREATE COLUMN FAMILY users with comparator = UTF8Type and default_validation_class = UTF8Type and key_validation_class = UTF8Type;
81ca1c3f-3557-3a31-aeb3-981fe297016c

カラムのソートとして、Cassandraではデフォルトでカラムファミリに設定を行います。それが、comparator項目です。

comparator 概要
UTF8Type UTF-8をエンコードとして文字列です。
AsciiType バイトを直接ソートして、入力をUS-ASCIIとしてパースして検証します。
BytesType デフォルトのタイプで、検証のステップはスキップされ、バイトを直接比較することによってソートします。
LexicalUUIDType 128ビットのUUIDを使ってバイト値を字句順序で比較します。
IntegerType LongTypeよりも高速で、LongTypeで提供している64ビットよりも少ないビットでも多いビットでも扱えます。
LongType 64ビットのlongの数値としてソートします。
TimeUUIDType 128ビットのタイムスタンプでソートします。

システムの要件によっては、上記に示したデフォルトのソート群では足りない場合がありますが、カスタムでソートクラスを作成することが可能です。
その場合は「org.apache.cassandra.db.marshal.AbstractType」を敬称して自前のソートクラスを作成してください。

作成したキースペースの定義情報を以下のコマンドで出力してみます。

[default@demo] describe demo;

WARNING: CQL3 tables are intentionally omitted from 'describe' output.
See https://issues.apache.org/jira/browse/CASSANDRA-4377 for details.

Keyspace: demo:
  Replication Strategy: org.apache.cassandra.locator.SimpleStrategy
  Durable Writes: true
    Options: [replication_factor:1]
  Column Families:
    ColumnFamily: user
      Key Validation Class: org.apache.cassandra.db.marshal.BytesType
      Default column value validator: org.apache.cassandra.db.marshal.BytesType
      Columns sorted by: org.apache.cassandra.db.marshal.UTF8Type
      GC grace seconds: 864000
      Compaction min/max thresholds: 4/32
      Read repair chance: 0.1
      DC Local Read repair chance: 0.0
      Populate IO Cache on flush: false
      Replicate on write: true
      Caching: KEYS_ONLY
      Bloom Filter FP chance: default
      Built indexes: []
      Compaction Strategy: org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy
      Compression Options:
        sstable_compression: org.apache.cassandra.io.compress.SnappyCompressor

データを投入してみる

SET users['yusuke']['full_name']='Yusuke Iwasaki';
Value inserted.
Elapsed time: 17 msec(s).
[default@demo] get users['yusuke'];
=> (column=full_name, value=Yusuke Iwasaki, timestamp=1371368738745000)
Returned 1 results.
Elapsed time: 3.5 msec(s).
[default@demo] SET users['yusuke']['email']='yusuke6287@gmail.com';
Value inserted.
Elapsed time: 1.96 msec(s).
[default@demo] SET users['yusuke']['gender']='M';
Value inserted.
Elapsed time: 2.14 msec(s).
# ロウキーを指定して取得
[default@demo] get users['yusuke'];
=> (column=email, value=yusuke6287@gmail.com, timestamp=1371369400080000)
=> (column=full_name, value=Yusuke Iwasaki, timestamp=1371368738745000)
=> (column=gender, value=M, timestamp=1371369405461000)
Returned 3 results.
Elapsed time: 2.7 msec(s).
# full_nameを指定して取得
[default@demo] get users['yusuke']['full_name'];
=> (column=full_name, value=Yusuke Iwasaki, timestamp=1371368738745000)
Elapsed time: 12 msec(s).

リレーショナルデータベースユーザとしては少し違和感があるかもしれないが、カラムファミリーを生成した時点では定義情報(カラム)は定義していなかったが、データを投入したときには、full_name, email, generのカラムを指定してINSERTしている。定義情報はかなりゆるく、これがスタートアップの変更が激しいアプリケーションに向いているといわれる所以なのである。

そのほかコマンド群については以下のページが参考になるので参照されたい。
cassandra CLI

コメントを残す