我可以按键排序并随机分区吗?

时间:2013-01-04 07:48:34

标签: nosql cassandra

例如,如果我处理大量事务[timestamp(key),value,trader,..],我想为负载平衡进行随机分区。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

节点是Cassandra是环状的,环中的每个节点负责关键范围(数据集)。我们的想法是,在环中的所有节点上均等地划分数据,并且还独立地执行每个写操作 - 这样我们就不需要跟踪最后的更新以便平衡环中的数据。

随机分区程序使用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上

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