DataStax Academy DS201
DS201.01 Course Introduction | Foundations of Apache Cassandra
Basic
partition key data haah to ring group by consistent hash
copy命令,外界导入cassandra数据。
PRIMARY KEY: unique record, control order
PRIMARY KEY:paration key, cluster column(查询必须先确认分区,然后才能查询)
分布式特性:读写路径。
如何改变默认顺序。cluster column。
主键插入不会报错,但是会覆盖数据。
顺序在磁盘,二分搜索会有有效。
ALLOW FILTERING:https://www.datastax.com/blog/allow-filtering-explained
一个节点2-4T。
Partitioner
hash partition key to get prtition token
Node.
数据存在distributed hash table
6000-12000 transaction/second/core 2-4TB
Nodetool
Ring
-2^63 ~ 2^63 -1
CLuster叫Ring.每个节点管理一段范围数据,叫token range. 协调节点知道token range. token range 是partitioner分配的。
不停机。种子节点,对等节点。driver is aware of which token range belong to which node, which replica. TokenAwarePolicy:避免协调节点,驱动知道数据在哪一个节点。 RoundRobinAwarePolicy:随机选择ring中的节点。 DCAwreRoundRobinPolicy:指定数据中心。
Peer 2 Peer
Leader-Follower。选举期间不可用。
P2P 不用选举,但是有协调节点。处理网络分区是怎么处理的?keep always online。
VNode
如果新加入节点,会导致数据迁移压力全在一个节点,VNode会从不同节点拉取数据。keep cluster balance。
add/remove node with vnode help keep cluster balanced. each node has 128 vnode. vnode automate token range assignment. 配置参数 num_tokens.
Gossip
数据复制是通过gossip吗?不是,传递的是metadata。
seed nodes就是开始节点。
gossip:node/cluster metadata,not client data
Endpoint State:https://github.com/facebookarchive/cassandra/blob/master/src/org/apache/cassandra/gms/Gossiper.java
uses the Gossip protocol to distribute nodes' status amongst its peers.
Snitch
which node belong where
cassandra.yml:endpoint_snitch:SimpleSnitch
cloud base snitch
dynamic snitch
改变这个需要重启集群。
Replication
ring replicate data
replication factor: 1 RF:2 each node store two copies. neighbors store neighbors data store.
一般是 RF=3. 3台机器宕机情况很少。
Consistency
RF+CL(Consitency Level)
replication factor
RF=3(数据存三份) CL=one(一个replica回复即可) CL=QUROUM(2个,不能容忍分区容错得) CL=ALL(3个必须回复)
强一致性:读到最新写的。
WRITE CL:ALL READ CL:ONE
CL ONE: 写入很快,(IOT,时序数据,log data) always online。
写入很快,读取较慢。W(1)+R(2)>N(3).
如果W=2,意味着两个节点写入了吗?还是响应?
consistency 和 latency 取舍。(PACELC)
consistency默认是one.
Hint Handoff
rf=3,4个node,协调节点写入一个node失败,协调节点会存储。等节点成功,再次传递。默认3小时。
RF=3,4个node,1个node宕机,CL=one,two。协调节点会返回成功,three,协调节点会返回错误。
CL=any的话,生产环境不建议,协调节点会存储所有hint suffices,CL=one,至少会写入一个成功。如果超过hint hand off 时间窗口,协调节点会删除数据。如果协调节点宕机,会失去所有数据。 CL=one,至少一个replicate node会存储成功。
Availability can affect data consistency. Hinted-handoff helps Apache Cassandra(TM) maintain consistency even when a node is down.
Read Repair
Node=4,RF=3,CL=ALL,Node1 Data,Node 2,3 摘要(checksum) Node4 协调。
checksum不一样,说明数据不一致。
CL=ALL,一致性越少,越读不到最新数据。
nodetool full repair sync all data in cluster.
read_repair_chance: Sets the probability which Cassandra will perform a read repair with a consistency level less than ALL.
Read repair is always occurs when consistency level is ALL.
Node Sync
node sync vs full repair
full repair对集群性能影响较大。
CREATE TABLE nodesync = true,在表级别,默认关闭。
Write Path
HDD:commit log, SSTable
RAM:MemTable
commit log总是写入顺序,memtable 不是写入顺序。
SSTable和MemTable 保证clustering column有序,commit log保证写入有序。
Read Path
如何在SStable读取,如何在Memtable读取数据?
Bloom Filter:space和精确性权衡。
disk:SSTable(不可变的),partition index
Compaction
合并SSTable:先合并partition数据,然后合并partition。合并完之后删除旧的SSTable。
三种策略:SizeTiered,Leveled,TimeWindows。
gc_grace_second 10天。864000 seconds (10 days).