例如,如果我处理大量事务[timestamp(key),value,trader,..],我想为负载平衡进行随机分区。
但是为了查询,我希望这些事务按每个节点上的时间戳排序,以便在过去5分钟(或其他某个时间段)内完成所有事务的速度非常快,并使用MapReduce组合总计
如果我使用随机分区器,为什么cassandra会随机对文件中的键进行排序?
Q1:有解决方法吗?我可以使用索引,但它并不理想。
Q2。出于好奇,我想知道为什么一个节点中的密钥排序与分区策略有关?
答案 0 :(得分:1)
节点是Cassandra是环状的,环中的每个节点负责关键范围(数据集)。我们的想法是,在环中的所有节点上均等地划分数据,并且还独立地执行每个写操作 - 这样我们就不需要跟踪最后的更新以便平衡环中的数据。
随机分区程序使用Consistent Hashing来存储随机节点上的行键,以便稍后查找它们。它基本上生成实际行密钥的哈希值(这是BigInteger),并且它在环中找到负责此哈希的节点(在此节点的范围内)。
例如,我们在响铃中有4个节点(我将使用较小的数字以保持简单):
行键“value1”的哈希值为23,因此它将存储在节点1上
行键“value2”的哈希值给出123,因此它将存储在节点2上
为了解决你的问题,你需要编写手动索引,而二级索引可能不是完美的想法 - 它有一些局限性(低肉质)