正如我们从 Cassandra 的文档 [ Link to doc ] 中知道的那样,分区器应该使数据均匀分布在多个节点上,以避免读取热点。Cassandra 为此提供了各种分区算法 - Murmur3Partitioner、RandomPartitioner、ByteOrderedPartitioner。
Murmur3Partitioner 是 Cassandra 设置的默认分区算法。它对分区键进行哈希处理并转换为范围从 -2^63 到 +2^63-1 的哈希值。我的查询是,我们有不同的数据集,它们有不同的分区键。例如,可以使用 uuid 类型的数据设置分区键,其他可以设置名字和姓氏作为分区键,其他可以设置时间戳作为分区键,还可以在分区键中设置城市名称。
现在假设一个以城市为分区键的数据集,假设
节点 1 存储休斯顿数据
节点 2 存储芝加哥数据
Node 3 故事 Phoenix 数据等等……
并且我们的数据在某一时刻获得更多与芝加哥市的数据条目,然后节点 2 将拥有我们数据库的最大记录,并且在这种情况下会有热点。在这种情况下,Cassandra 将如何设法在这些节点之间均匀分布数据?