CASSANDRA
To be or not to be?
ABOUT ME
Andriy Rymar
Senior Software Engineer @ Lohika
Morning@Lohika Program Committee Member
JUG Lviv Active Member
2
AGENDA
3
AGENDA
Cluster Ring
3
Node 4
Node 1
Node 2
Node 3
AGENDA
Cluster Ring
Data Model
3
Row1
Row2
Row3
AGENDA
Cluster Ring
Data Model
Read & Write
3
Read
Write
AGENDA
Cluster Ring
Data Model
Read & Write
Update & Delete
3
Update
Delete
AGENDA
Cluster Ring
Data Model
Read & Write
Update & Delete
3
To be or not to be?
PREFACE
4
TRENDS
5
TRENDS
5
TRENDS
6
TRENDS
6
6
7http://stanfordflipside.com/images/236richKid.jpg
8
BUSINESS NEEDS
CASSANDRA
To be or not to be?
10
CLUSTER
DISCOVERY
Node1
Node3
Node4 Node2
11
DISCOVERY
Node3
Node4 Node2
Node1
11
DISCOVERY
Node3
Node4 Node2
Hi, I’m node 2
Node1
11
DISCOVERY
Node3
Node4 Node2
OK, here are
you and me
Hi, I’m node 2
Node1
11
DISCOVERY
Node3
Node4 Node2
Hi, I’m node 3
OK, here are
you and me
Hi, I’m node 2
Node1
11
DISCOVERY
Node3
Node4 Node2
Hi, I’m node 3
OK, here are
you and me
Hi, I’m node 2
Well, here are you,
me and node2
Node1
11
DISCOVERY
Node3
Node4 Node2
Hi, I’m node 4
Hi, I’m node 3
OK, here are
you and me
Hi, I’m node 2
Well, here are you,
me and node2
Node1
11
DISCOVERY
Node3
Node4 Node2
Cool, here are you, me,
node2 and node3
Hi, I’m node 4
Hi, I’m node 3
OK, here are
you and me
Hi, I’m node 2
Well, here are you,
me and node2
Node1
11
DISCOVERY
Node3
Node4 Node2
Cool, here are you, me,
node2 and node3
Hi, I’m node 4
Hi, I’m node 3
OK, here are
you and me
Hi, I’m node 2
Well, here are you,
me and node2
Node1
11
DISCOVERY
Node3
Node4 Node2
Cool, here are you, me,
node2 and node3
Hi, I’m node 4
Hi, I’m node 3
OK, here are
you and me
Hi, I’m node 2
Well, here are you,
me and node2
Node1
11
DISCOVERY
Node3
Node4 Node2
Cool, here are you, me,
node2 and node3
Hi, I’m node 4
Hi, I’m node 3
OK, here are
you and me
Hi, I’m node 2
Well, here are you,
me and node2
Node1
11
RING
Node1
Node3
Node4 Node2
12
DATA RANGE
Long.min Long.max
13
DATA RANGE
Long.min Long.max
13
RING CLUSTER
Node1
Node3
Node4 Node2
Long.minLong.max
14
TOKEN
15
TOKEN
12343214
15
TOKEN
12343214
Long.min Long.max
15
INITIALTOKENS
Node1 Node2
12343214 21144543
16
17
TOKENS
Issues
17
TOKENS
REPLICATION
18
REPLICATION
RF
18
= 2
REPLICATION
RF
18
= 2
REPLICATION
RF
18
«Hello,TechTalk»
Node 1:
«Hello,
TechTalk»
Node 2:
«Hello,
TechTalk»
REPLICATION &TOKENS
Node1
Node 2Node 3
19
REPLICATION &TOKENS
Node1
RF = 2
Node 2Node 3
19
REPLICATION &TOKENS
RF = 2
Node 2Node 3
Node1
19
REPLICATION &TOKENS
RF = 2
Node 2Node 3
Node1
19
REPLICATION &TOKENS
RF = 2
Node 3
Node1
Node 2
node1
Node1
19
REPLICATION &TOKENS
RF = 2
Node 3
Node1
Node 2
node1
Node1
19
REPLICATION &TOKENS
RF = 2
Node 3
Node1
Node 2
node1
Node1
19
REPLICATION &TOKENS
Node1
RF = 2
Node 3 Node 2
node1
19
REPLICATION &TOKENS
Node1
RF = 2
Node 3 Node 2
node1
19
REPLICATION &TOKENS
Node1
RF = 2
Node 3 Node 2
node1
Node 2
node1
19
VNODE
20
VNODE
20
VNODE
255
20
VNODE
255
From To
20
REPLICATION &V-NODE
Node1
Node 2Node 3
21
REPLICATION &V-NODE
Node1
RF = 2
Node 2Node 3
21
REPLICATION &V-NODE
Node1
RF = 2
Node 2Node 3
v-node = 2
21
Node1
REPLICATION &V-NODE
RF = 2
Node 2Node 3
v-node = 2
21
Node1
REPLICATION &V-NODE
RF = 2
Node 2Node 3
v-node = 2
21
Node1
REPLICATION &V-NODE
RF = 2
Node 2Node 3
v-node = 2
21
Node1
REPLICATION &V-NODE
RF = 2
Node 2Node 3
v-node = 2
21
Node1
REPLICATION &V-NODE
RF = 2
Node 2Node 3
v-node = 2
21
REPLICATION &V-NODE
Node1
RF = 2
Node 2Node 3
v-node = 2
21
REPLICATION &V-NODE
Node1
RF = 2
Node 2Node 3
v-node = 2
21
NODE RANGE
Node1
Node3
Node4 Node2
22
NODE RANGE
23
Node1
Node3
Node4 Node2
CASSANDRA
To be or not to be?
25
DATA MODEL
KEYSPACE
26
KEYSPACE
26
KEYSPACE
Table1 Table2
26
KEYSPACE
26
Column Family 1 Column Family 2
KEYSPACE
Row 1
Row 2
Row 1
Row 2
26
Column Family 1 Column Family 2
KEYSPACE
value value value
value value
value
key key key key
key key
value value value
key key key
Row 1
Row 2
Row 1
Row 2
26
Column Family 1 Column Family 2
DATA DISTRIBUTION
27
DATA DISTRIBUTION
murmur3(partition_key)
27
28
KEYS
28
KEYS
Primary
28
KEYS
Primary
http://www.pngall.com/man-png
28
KEYS
Primary
Partition
http://www.pngall.com/man-png
28
KEYS
Primary
Partition
http://www.pngall.com/man-png
http://www.pngmart.com/image/31069
28
KEYS
Primary
Partition
Composite
http://www.pngall.com/man-png
http://www.pngmart.com/image/31069
28
KEYS
Primary
Partition
Composite
http://www.pngall.com/man-png
http://www.pngmart.com/image/31069 http://www.pngmart.com/image/21342
28
KEYS
Primary
Partition
Composite
Clustering
http://www.pngall.com/man-png
http://www.pngmart.com/image/31069 http://www.pngmart.com/image/21342
28
KEYS
Primary
Partition
Composite
Clustering
http://www.pngall.com/man-png
http://www.pngmart.com/image/31069 http://www.pngmart.com/image/21342
http://ujceastside.org/home-health-aides/
29
PRIMARY
CREATE TABLE album (
id uuid,
name text,
PRIMARY KEY (id)
)
29
PRIMARY
CREATE TABLE album (
id uuid,
name text,
PRIMARY KEY (id)
)
Primary & Partition & Clustering
30
PARTITION
CREATE TABLE author_book (
author text,
book text,
population int,
PRIMARY KEY (author, book)
)
30
PARTITION
CREATE TABLE author_book (
author text,
book text,
population int,
PRIMARY KEY (author, book)
)
Partition Clustering
31
COMPOSITE & CLUSTERING
CREATE TABLE teacher_lesson (
teacher text,
lesson text,
topic text,
duration int,
PRIMARY KEY ((teacher, lesson), topic, duration)
)
31
COMPOSITE & CLUSTERING
CREATE TABLE teacher_lesson (
teacher text,
lesson text,
topic text,
duration int,
PRIMARY KEY ((teacher, lesson), topic, duration)
)
Composite Clustering
32
IMPORTANT
32
IMPORTANT
Natural ordering
32
IMPORTANT
Natural ordering
No relations
32
IMPORTANT
Natural ordering
No relations
No ACID transactions
CASSANDRA
to be or not to be?
34
READ & WRITE
ARCHITECTURE
Node
35
ARCHITECTURE
Memory Permanent storage
Node
35
ARCHITECTURE
Memory
MemTable
Permanent storage
Node
35
ARCHITECTURE
Memory
MemTable
CommitLog
Permanent storage
Node
35
ARCHITECTURE
Memory
MemTable
CommitLog
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Node
35
ARCHITECTURE
Memory
MemTable
CommitLog
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
35
Memory
MemTable
CommitLog
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
35
WRITE
Request
Memory
MemTable
CommitLog
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
35
WRITE
Request
Memory
MemTable
CommitLog
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
1
35
WRITE
Request
Memory
MemTable
CommitLog
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
1
2
35
WRITE
Request
Memory
MemTable
CommitLog
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
1
3
4
2
35
WRITE
Request
Memory
MemTable
CommitLog
Permanent storage
SSTable 5
SSTable 4
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
1
3
4
5
2
35
WRITE
WRITE
Node 1 Node 2 Node 3
36
WRITE
Node 1 Node 2 Node 3
RF = 3
36
WRITE
Node 1 Node 2 Node 3
RF = 3
36
Client
WRITE
Node 1 Node 2 Node 3
RF = 3
36
Client
CONSISTENCY LEVEL
37
CONSISTENCY LEVEL
37
CL
WRITE
Node 1 Node 2 Node 3
RF = 3
38
Client
WRITE
Node 1 Node 2 Node 3
RF = 3
38
Client
CL = 2
WRITE
Node 3
RF = 3
Node 2Node 1
38
Client successsuccess
CL = 2
WRITE
Node 3
RF = 3
Node 2Node 1
38
Client successsuccess
CL = 2
READ
Memory
MemTable
Permanent storage
Node
39
Request
READ
Memory
MemTable
Permanent storage
Node
39
Request
READ
Memory
MemTable
Permanent storage
Node
1
39
Request
READ
Memory
MemTable
Permanent storage
Node
SSTable 1 SSTable 2
1
39
Request
READ
Memory
MemTable
Permanent storage
Node
SSTable 1BF IF SSTable 2BF IF
1
39
Request
READ
Memory
MemTable
Permanent storage
Node
SSTable 1BF IF SSTable 2BF IF
1
2
39
Request
READ
Memory
MemTable
Permanent storage
Node
SSTable 1BF IF SSTable 2BF IF
1
2
3
39
Request
READ
Memory
MemTable
Permanent storage
Node
SSTable 1BF IF SSTable 2BF IF
1
2
3
4
39
Request
READ
Memory
MemTable
Permanent storage
Node
SSTable 1BF IF SSTable 2BF IF
1
2
3
4
5
39
Request
READ
Memory
MemTable
Permanent storage
Node
SSTable 1BF IF SSTable 2BF IF
1
2
3
4
5 6
39
READ
Node 1 Node 2 Node 3
40
READ
Node 1 Node 2 Node 3
RF = 3
40
READ
Node 1 Node 2 Node 3
CL = 2
RF = 3
40
READ
Node 1 Node 2 Node 3
CL = 2
RF = 3
40
Client
READ
Node 1 Node 2 Node 3
CL = 2
RF = 3 get digest
40
Client
READ
Node 1 Node 2 Node 3
CL = 2
RF = 3 get digest
123453
40
Client
READ
Node 1 Node 2 Node 3
CL = 2
RF = 3 get digest
123453
40
Client
CASSANDRA
To be or not to be?
42
UPDATE & DELETE
UPDATE
43
UPDATE
Upsert
43
UPDATE
Memory
MemTable
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
CommitLog
44
UPDATE
Request
Memory
MemTable
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
CommitLog
44
UPDATE
Request
Memory
MemTable
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
CommitLog
1
44
UPDATE
Request
Memory
MemTable
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
CommitLog
1
2
44
UPDATE
Request
Memory
MemTable
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
CommitLog
1
2
3
44
UPDATE
Request
Memory
MemTable
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
CommitLog
1
2
3 4
44
UPDATE
Request
Memory
MemTable
Permanent storage
SSTable 1 SSTable 2 SSTable 3
Newer Older
Node
CommitLog
1
2
3 4
5
44
DELETE
45
DELETE
https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlDelete.html
45
DELETE
46
DELETE
46
Update flow *
TOMBSTONES
47 http://shipoffools.wikia.com/wiki/File:Tombstone.png
TOMBSTONES
Overhead
47 http://shipoffools.wikia.com/wiki/File:Tombstone.png
TOMBSTONES
48
TOMBSTONES
Remove
48
TOMBSTONES
Remove
Null
48
TOMBSTONES
Remove
Null
TTL
48
CASSANDRA
To be or not to be?
50
SUMMARY
RECOMMENDATIONS
https://youtu.be/pAGESQo5IjI
51
https://youtu.be/h14iML3aaK0
THANKYOU
My contacts :
Email : andriyrav@gmail.com
Q / A
52
Twitter : @AndriyRymar

Cassandra : to be or not to be @ TechTalk