Beruflich Dokumente
Kultur Dokumente
E-mail : Alexey_Zinovyev@epam.com
Facebook: https://www.facebook.com/zaleslaw
Highload applications
Sharding & replication
NoSQL databases
5TB
I
300GB
50GB
Cassandra
Hbase
Neo4j
Riak
Caching
Master/Slave
Cluster
Table Partitioning
Sharding
Scalability
Nodes and Data Centers
Easy to add new server
Specific data model
Eventual consistency
read-write-modify (CAS)
key/row manipulation is atomic
API for atomic operations
bad support of transactions
16 mb
JavaScript at the bottom
2d, 3d, B-tree indexes
3.0 version is very hot
integration with Kafka
CQL
2 billions columns in row
No ACID, of course
Can spend all your RAM
JVM - based
Ring of nodes
Vertices, edges
ACID
REST API + Cypher
2d index
Not so good for
distributed data
Training from Zinoviev Alexey 69
And what should we choose?
If no -> continue
If no -> continue
If no -> continue
If no -> continue
SimpleStrategy
NetworkTopologyStrategy
Training from Zinoviev Alexey 81
Cassandra Tunable Consistency
Write Consistency Read Consistency
ALL ALL
EACH_QUORUM EACH_QUORUM
QUORUM QUORUM
LOCAL_QUORUM
LOCAL_QUORUM
ONE
ONE
TWO
TWO
LOCAL_ONE
LOCAL_ONE
ANY
No Use
NO joins Data denormalization
NO subqueries Data duplication
NO Group By functionality PK, Indexes
NO aggregation functions Counters,
CAS Transactions, Batches
Keys Types Advanced Data Structures
partition key
Simple primary key PRIMARY KEY (empID)
partition key clustering key
Compound primary key PRIMARY KEY (empID, subdeptID, depID)
partition key clustering key
Composite primary key PRIMARY KEY ((block_id, breed), color)
Training from Zinoviev Alexey 87
User-defined types
street text,
city text,
zip_code int,
phones set<text> );
emails set<text> );
{'f@baggins.com', 'baggins@gmail.com'});
Training from Zinoviev Alexey 90
TTL
event_type text,
insertion_time timestamp,
BEGIN BATCH
APPLY BATCH;
$ nodetool status
$ cqlsh 192.168.10.1
cqlsh> create keyspace data with
replication={'class':'SimpleStrategy','replication_factor':2};
cqlsh> use data;
Adds data types that JSON did not support (ISO Dates,
ObjectId, etc.)
Mongo auto-connect-retry="${mongo.autoConnectRetry}
socket-keep-alive="${mongo.socketKeepAlive}
config socket-timeout="${mongo.socketTimeout}
slave-ok="${mongo.slaveOk}
write-number="1
write-timeout="0
write-fsync="true"/>
</mongo:mongo>
<mongo:db-factory dbname= "test" mongo-ref="mongo"/>