基于节点的用例的cassandra数据建模

时间:2020-09-24 17:15:39

标签: cassandra cql

我有一个包含2列的cql表

{

long minutesTimeStamp->纪元时间的仅分钟部分。秒将被忽略。

字符串数据->一些数据

}

我有一个5节点的cassandra集群,我想每分钟在所有5个节点上均匀地分配数据。因此,如果每分钟的数据量约为1万条记录,那么每个节点应消耗的数据量约为2k。

我还想并行使用每一分钟的数据,这意味着5个不同的读取器在每个节点上读取1个数据。

我来到了一种解决方案,就像我在表中又保留了一列一样

{

long minutesTimeStamp

int shardIdx

字符串数据

分区键:(minuteTimeStamp,shardIdx)

}

通过在写入数据时执行此操作,我将对shardIdx进行循环轮询。由于cassandra使用 vnodes ,因此(min0,0)可能会进入node0,而(min0,1)也可能会进入node0,因为此令牌也可能属于node0。这样,我可以创建一些热点,而且还会妨碍读取,因为5个并行读取器想要在每个节点上读取1个,但是可能有多个读取器到达同一节点。

我们如何设计分区键,以便在不编写自定义分区程序的情况下均匀地分布数据?

1 个答案:

答案 0 :(得分:0)

无需通过分片使数据分发更加复杂。

当您接近成千上万个分区时,默认的Murmur3Partitioner将在节点之间平均分配数据。

如果您的用例确实要成为“数据1”上的热点,那么用例/访问模式将是一个固有的问题,但是在实践中很少会出现,除非您在其中遇到了超节点问题(例如)社交图用例,其中泰勒·斯威夫特(Taylor Swift)或巴拉克·奥巴马(Barack Obama)的追随者比其他所有人都要多。干杯!