Cassandra2.2 系をyumでインストールする、そして操作してみる
よくわからないでCassandraをインストールして利用してみます。
java のインストール
rpm -ivh jdk-8u65-linux-x64.rpm
Cassandra yumリポジトリファイルの設定
cat << '_EOT_' > /etc/yum.repos.d/datastax.repo
[datastax]
name = DataStax Repo for Apache Cassandra
baseurl = http://rpm.datastax.com/community
enabled = 1
gpgcheck = 0
_EOT_
Cassandra のインストール
どこからどこまでがCassandraだかわからんけど。。こんな感じ
yum install dsc22
yum install cassandra22-tools
Cassandra の開始
/etc/init.d/cassandra start
------------------------------------------------------------------------------
Starting Cassandra: OK
/etc/init.d/cassandra status
------------------------------------------------------------------------------
cassandra (pid 22545) を実行中...
cqlshの起動
CassandraをSQLライクに操作するツールです。Hiveql みたいなもんかな?
cqlsh
------------------------------------------------------------------------------
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.2.3 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh>
cqlでの操作
スキーマ(キースペースの作成)
とりあえず。深いことは考えない。MySQLでいうところのデータベースを作成すると同じだと思ってくれれば
cqlsh>
cqlsh> create keyspace logs with replication = {'class' : 'SimpleStrategy',
'replication_factor' : 1};
キースペースが作成された確認する
MySQLでいうところの、show create database logs と同じと思っていただければと
cqlsh>
describe keyspace logs ;
------------------------------------------------------------------------------
CREATE KEYSPACE logs WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;
テーブルの作成
- MySQL
CREATE TABLE `customer_action_logs` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`updated_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'UTC-DATE',
`domain` varchar(128) DEFAULT NULL COMMENT 'ex: www.yourdomain.com',
`uri` varchar(500) DEFAULT NULL,
`member_id` int(11) DEFAULT '0' COMMENT 'ログイン前であれば、0',
`user_agent` varchar(255) DEFAULT NULL,
`referer` varchar(500) DEFAULT NULL,
`session_id` varchar(200) DEFAULT NULL COMMENT 'セッションID',
PRIMARY KEY (`id`),
KEY `ix01_customer_action_logs` (`member_id`),
KEY `ix02_customer_action_logs` (`updated_at`)
) ENGINE=InnoDB AUTO_INCREMENT=173735587 DEFAULT CHARSET=utf8 ;
- cql
Use logs ;
cqlsh:logs>
CREATE TABLE customer_action_logs (
id uuid PRIMARY KEY,
updated_at timestamp,
domain varchar,
uri varchar,
member_id int,
user_agent varchar,
referer varchar,
session_id varchar
) ;
CREATE INDEX ix01_customer_action_logs ON customer_action_logs ( member_id );
CREATE INDEX ix02_customer_action_logs ON customer_action_logs ( updated_at );
テーブルが作成できたか確認する
cqlsh:logs> describe table customer_action_logs ;
CREATE TABLE logs.customer_action_logs (
id uuid PRIMARY KEY,
domain text,
member_id int,
referer text,
session_id text,
updated_at timestamp,
uri text,
user_agent text
) WITH bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
CREATE INDEX ix01_customer_action_logs ON logs.customer_action_logs (member_id);
CREATE INDEX ix02_customer_action_logs ON logs.customer_action_logs (updated_at);
INSERT してみる
日時の設定が悩みましたが、あとは、SQLのインサートと同じかな?あと、オートインクリメントは、UUID属性で作成しているので、どんな感じでユニークにしているかがポイント★
INSERT INTO customer_action_logs
(
id,
domain,
member_id,
referer,
session_id,
updated_at,
uri,user_agent
) VALUES (
now(),
'qiita.com',
12345678,
'qiita.ref.com',
'session010101',
dateof(now()),
'/hit/items/3151208b7f01aaa1ea9d',
'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
) ;
INSERT INTO customer_action_logs
(
id,
domain,
member_id,
referer,
session_id,
updated_at,
uri,user_agent
) VALUES (
now(),
'qiita.com',
121221122,
'qiita.ref.com',
'session010101',
dateof(now()),
'/hit/items/3151208b7f01aaa1ea9d',
'Mozilla/4.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
) ;
と、まあ、こんな感じで操作することができました。Cassandraは、クラスタリングで威力を発揮するものなので、単体でのインストールは意味ないのですが、NoSQLでSQLライクなことができるって便利だと思いませんか?ってことで次回気が向いたら、MariaDBと連携する部分を書いていこうかな?って思ってます。