3

例如,如果我处理大量事务 [时间戳(键)、值、交易者、..],我希望进行随机分区以实现负载平衡。

但是为了查询,我希望这些事务按每个节点上的时间戳排序,以便在最后 5 分钟(或其他时间段)内完成所有事务并使用 MapReduce 合并总数会非常快。

如果我使用随机分区器,为什么 cassandra 会对文件中的键进行随机排序?

Q1:有解决办法吗?我可以使用索引,但这并不理想。

Q2。出于好奇,我想知道为什么一个节点中的键排序与分区策略有关?

4

1 回答 1

1

节点是 Cassandra 是环形式的,环中的每个节点负责键范围(数据集)。这个想法是,在环中的所有节点上平均分配数据,另外独立地执行每个写入操作 - 这样我们就不需要跟踪最后的更新来平衡环中的数据。

Random Partitioner 使用Consistent Hashing将行键存储在随机节点上,以便以后找到它们。它基本上生成真实行键的哈希(这是BigInteger),并在环中找到负责这个哈希的节点(它在这个节点的范围内)。

例如,我们在环中有 4 个节点(为了简单起见,我将使用较小的数字):

  • 节点 1 = initial_token: 0
  • 节点 2 = initial_token: 100
  • 节点 3 = initial_token: 200
  • 节点 4 = initial_token: 300

行键“value1”的哈希值为 23,因此它将存储在节点 1 上

行键“value2”的哈希值为 123,因此它将存储在节点 2 上

为了解决您的问题,您需要编写手动索引,二级索引可能不是完美的想法 - 它有一些限制(低肉体)

于 2013-01-04T20:54:53.703 回答