際際滷

際際滷Share a Scribd company logo
Apache Cassandra
蛍柊システムのツア` #2
Chris
2014/7/29
#m3dev
https://github.com/m3dev/distrib-systems-tour
Cassandra
¢ 蛍柊 key-value store
o ^schema-optional ̄
¢ Fault tolerance、辛喘來
o 徭咼譽廛螢羽`ト
o g匯嬾墾泣なし
¢ リニアにスケ`ルする
¢ Eventual consistency
o チュ`ニング辛嬬
¢ }方DC撹を深]したO
デ`タ撹
¢ keyspace P DB スキ`マ
¢ column family P DBテ`ブル
¢ unique primary key 駅
¢ 侏ありint, varchar, timestamp, uuid, ...
Column family: Users
123
Primary key
user_id
name
Chris
age
29
likes
ramen
dislikes
sushi
456
name
Bob
age
35
廣吭SuperColumns
}方のk-vペアをまとめる仝サ`パ`カラム々
もあるが、Deprecateされている
硬いドキュメントやブログによく竃るので、
oしてください
CQL (Cassandra Query Language)
CREATE KEYSPACE demo WITH REPLICATION =
{ 'class' : 'SimpleStrategy', 'replication_factor' : 1
};
USE demo;
CREATE TABLE users(
user_id int PRIMARY KEY,
name varchar,
age int,
likes varchar,
dislikes varchar);
CQL: INSERT
INSERT INTO users (user_id, name, age, likes, dislikes)
VALUES ( 123, 'chris', 29, 'ramen', 'sushi');
INSERT INTO users (user_id, name, age)
VALUES ( 456, 'bob', 35);
gは、INSERTもUPDATEもアトミックな UPSERT をする
箭えば
INSERT INTO users (user_id, age)
VALUES ( 123, 30);
で貧のユ`ザ123のageは厚仟される
CQL: SELECT
SELECT * FROM users;
user_id | age | dislikes | likes | name
---------+-----+----------+-------+-------
123 | 30 | sushi | ramen | chris
456 | 35 | null | null | bob
(2 rows)
¢ レコ`ドはPRIMARY KEYでソ`トされる
¢ レコ`ド坪のキ`はアルファベットでソ`トされる
クエリ崙泯┌隠
¢ 販吭のキ`でクエリできない
o PRIMARY KEY、インデックスされたキ`のみ
cqlsh:demo> SELECT * FROM users WHERE user_id = 123;
user_id | age | dislikes | likes | name
---------+-----+----------+-------+-------
123 | 30 | sushi | ramen | chris
cqlsh:demo> SELECT * FROM users WHERE name = 'chris';
Bad Request: No indexed columns present in by-columns
clause with Equal operator
クエリ崙泯┌横
¢ JOINができない
o アプリ箸JOINする、or
o materialized view恬るdenormalization
? クエリに鬉垢襯透`ブルを恬撹する
? アプリ箸妊透`ブル坪否を械r厚仟する
SQL
select u.id, p.name
from user u join product p on u.product_id = p.id
CQL
select user_id, product_name from user_product
宴旋C嬬counter侏
CREATE TABLE page_views(
url varchar PRIMARY KEY, views counter);
UPDATE page_views
SET views = views + 1
WHERE url = `www.m3.com¨;
宴旋C嬬TTL
CREATE TABLE hoge(foo int PRIMARY KEY, bar varchar);
INSERT INTO hoge(foo, bar) VALUES (123, `abc¨) USING TTL
10;
cqlsh:demo> select * from hoge;
foo | bar
-----+-----
123 | abc
10昼棋つ。。。
cqlsh:demo> select * from hoge;
(0 rows)
Consistency levels
¢ 匯來と辛喘來とのトレ`ドオフ
¢ read, writeそれぞれチュ`ニング辛嬬
¢ クエリg了でレベルをxべる
¢ ANY坤立`ド1岬┐匹譴任發いぃ
¢ ALL哉ノ`ド
¢ EACH_QUORUM左デ`タセンタ`において
1岬參貧
¢ 。。。
Consistent hashing
66
33
99
token = hash(key) mod n
リニアにスケ`ルする
¢ Netflix芙がAWS貧でベンチマ`クを函った
http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html
288岬で
100嵐writes/s!!
ライブラリ
¢ Java
o DataStax driver
o Netflix Astyanax
¢ Scala
o Scqla
¢ Ruby
o cql-rb
¢ Node
o Helenus
o node-cassandra-cql
ハンズオン
OSX: brew install cassandra
or, AWS貧に借P嶄のCassandra を聞う
ec2-54-92-114-167.ap-northeast-
1.compute.amazonaws.com
https://github.com/m3dev/distrib-systems-tour

More Related Content

Tour of distributed systems 2 - Cassandra