例如,如果我处理了很多事务[时间戳(键),值,交易者,..]我想为了负载平衡而进行随机分区。我可以按行键排序并随机分区吗?
但是为了查询起见,我希望这些事务按每个节点上的时间戳排序,以便在最近5分钟(或某个其他时间段)内完成所有事务并使用总计MapReduce的。
为什么在文件中卡桑德拉排序键随机如果我使用随机分区?
Q1:对此有一个解决方法吗?我可以使用索引,但它并不理想。
Q2。出于好奇,我想知道为什么在与分区策略相关的节点中进行关键排序?
例如,如果我处理了很多事务[时间戳(键),值,交易者,..]我想为了负载平衡而进行随机分区。我可以按行键排序并随机分区吗?
但是为了查询起见,我希望这些事务按每个节点上的时间戳排序,以便在最近5分钟(或某个其他时间段)内完成所有事务并使用总计MapReduce的。
为什么在文件中卡桑德拉排序键随机如果我使用随机分区?
Q1:对此有一个解决方法吗?我可以使用索引,但它并不理想。
Q2。出于好奇,我想知道为什么在与分区策略相关的节点中进行关键排序?
节点是卡桑德拉是环的形式,在每个环节点负责键范围(数据集)。这个想法是,在环中所有节点上平均分配数据,另外独立执行每个写操作 - 这样我们就不需要跟踪上次更新,以平衡环中的数据。
随机分区器使用Consistent Hashing以存储在随机节点排按键,为了找到他们以后。它基本上生成真正的行密钥(这是BigInteger)的散列,并且它找到负责此散列的节点(它在此节点的范围内)。
例如,我们已经在环(I将使用以少数保持简单)4个节点:
行密钥 “VALUE1” 的散列给出23,所以将存储在节点1个
哈希行键“值2”中给出了123,所以它会被存储在节点2
为了解决你的问题,你需要写手动索引和二级索引可能是不完美的想法 - 它有一定的局限性(低肉欲)
我使用散列分区进行负载平衡,但在你的例子,如果我想插入行键“值3”与哈希119将在节点2“值2”之前插入,我想它在“value2”之后的节点2上。为什么密钥无法在单个节点上排序?没有相互独立的排序策略和分区策略的原因是什么?你能详细说明一下吗?谢谢。 – user1944408
我有一个狡猾的解决方法,但它非常糟糕,并且添加其他节点并不容易。我做的是这样的:对于5个节点,我的密钥将是MD5(时间戳)模块5:时间戳。第一个字节用于分区,因此我在每个节点上都有负载平衡和数据排序。不幸的是很难添加额外的节点。 – user1944408
好吧...卡桑德拉选择了简单高效的解决方案 - 这就是我不认为有更多的东西在这个想法背后。您可以通过创建宽行来在单个节点中排序键 - 在这种情况下,列名是排序的。如您已经看到的,您的带时间戳的解决方案不会扩展。我会重新设计你的模型 - 创建反向索引并使用非规范化 - 这真的不是很难;) –