Cassandra1.2文档学习(3)——数据分配和复制

参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/architectureDataDistributeAbout_c.html#concept_ds_g43_g3f_fk

在Cassandra中,数据分配和复制是同时进行的。这是因为Cassandra被设计为一个点对点的系统,数据有多个复制,被分发到一组节点上。数据按照表的形式构建以主键进行标识。主键决定了数据存储在那一个节点上面。Cassandra是一个面向行的数据库,行的副本就称其为复制。当数据第一次被写入的时候,就被称为是一个复制。

当你创建集群的时候,你需要指定一下属性:

Virtual nodes(虚拟结点): 指定数据属于那个物理机器

Partitioner(分区器): 决定了集群中数据如何分区

Replication strategy(复制策略): 决定如何进行每个数据行的复制

Snitch(告密者): 定义了复制策略放置数据复制所采用的拓扑信息

 

一、一致性哈希

详细说明在Cassandra集群中,一致性哈希机制是如何分发数据的。

 

采用一致性哈希对数据进行分析是基于主键的。以以下数据为例:

jim age: 36 car: camaro gender: M
carol age: 37 car: bmw gender: F
johnny age: 12 gender: M  
suzy age: 10 gender: F  

 

Cassandra 通过计算为每个主键分配了一个hash值。

Primary key Murmur3 hash value
jim -2245462676723223822
carol 7723358927203680754
johnny -6723372854036780875
suzy 1168604627387940318

 

在集群中的每个节点基于哈希值负责一段连续范围内的数据。

Node Murmur3 start range Murmur3 end range
A -9223372036854775808 -4611686018427387903
B -4611686018427387904 -1
C 0 4611686018427387903
D 4611686018427387904 9223372036854775807

 

Cassandra根据主键的哈希值将数据放置在主键所在范围内的节点。

Node Start range End range Primary key Hash value
A -9223372036854775808 -4611686018427387903 johnny -6723372854036780875
B -4611686018427387904 -1 jim -2245462676723223822
C 0 4611686018427387903 suzy 1168604627387940318
D 4611686018427387904 9223372036854775807 carol 7723358927203680754

Cassandra1.2文档学习(3)——数据分配和复制

上一篇:LCA(最近公共祖先)离线算法Tarjan+并查集


下一篇:插入排序(C#实现)