Cassandra备忘录:分区键和分区器
我将会阅读上述Cassandra 3.0版本的文档,并做出相关研究的记录。
由于我并没有实际运行和确认,所以可能会存在错误。请您指出任何发现的问题。
一致性哈希法和分区键。
Cassandra在数据的分散上使用了一致性哈希算法。可以在这张幻灯片中简洁地解释。将特定部分(键)的数据经过哈希函数计算,根据哈希值确定将数据分配到哪个节点。使用这种方法,可以尽量减少节点的添加和删除时的数据迁移。我认为一致性哈希算法是在将数据均匀分布到多个节点时的经典方法。
在Cassandra中,可以将经过哈希处理的键称为分区键(partition key)。根据设置,可以进行更改,但通常(默认情况下?),表的主键将成为分区键。
在Cassandra中,创建表时必须指定主键。
表的主键似乎是Cassandra数据模型中所述的“行”上的“键”。
分区器
现在,负责将分区密钥哈希化的角色是分区器(Partitioner)。有三种分区器,分别是”Murmur3Partitioner”、”RandomPartitioner”和”ByteOrderedPartitioner”,它们分别将不同的哈希函数应用于分区密钥。
Murmur3分区器
在3.0版本中,这是默认的分区器。相比后面提到的RandomPartitioner使用加密算法,这个分区器使用更轻量的算法,似乎可以以3到5倍的速度计算哈希值。无论使用哪种分区器,节点之间的数据分布都是均匀的。
随机分区器
Cassandra 1.2之前的默认Partitioner,为了保持与旧版本的兼容性而保留。使用MD5哈希函数。
字节有序分区器
为了兼容以前的版本,这个也被保留下来。将分区键的值本身视为哈希值。
一旦选择了Partitioner并存储了数据,似乎很难轻易地更改为其他Partitioner。除非需要继承过去版本的数据,否则基本上使用版本3.0的默认Murmur3Partitioner就没有问题了。