由于cassandra集群的每个节点是对等的,所以数据的分布和副本是在一起的。
数据是通过表组织起来的,通过行键(主键)标识,主键决定了数据存储在哪个节点。每一行会有多个副本(replica),注意第一份数据也被称为副本。
当建立一个集群时,必须指定以下内容:
虚拟节点:把数据分配到物理机器节点
分片器:在整个集群中对数据进行分片
副本策略:决定每行数据的副本
Snitch: 决定副本策略的拓扑信息。
数据分布
1.一致性hash
cassandra为每个主键计算一个hash值,为每个节点指定一个其负责的hash值范围,根据主键hash值和节点负责的hash值范围将不同的行存储到不同的节点。2.数据如何分布
在1.2之前,必须为每个节点分配一个token,每个token决定了节点在集群环上的位置以及它负责保存的数据(根据主键hash值)。
1.2版引入了虚拟节点,允许每个节点拥有多个小的hash范围。虚拟节点也使用一致性hash分布数据,但是不需要产生和分配token。
如下图所示:
副本策略
一行有几个副本由副本因子参数决定,1表示每行只有一个副本,2表示每行有2个副本,保存子不同的节点上。所有的节点都同样重要,没有主次之分。
副本数量应该不超过集群节点的数量。有两种副本策略:
SimpleStrategy:适用于只有一个数据中心的状况。第一个副本的存储位置由分片器(partitioner)决定,其他副本按照顺时针方向依次放在其它节点。
NetworkTopologyStrategy: 推荐方式,因为可以扩展到多数据中心。