LoginSignup
4
4

More than 5 years have passed since last update.

NOSQL Cassandra2.2 yum インストール & cql を試す!!

Posted at

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と連携する部分を書いていこうかな?って思ってます。

4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4