在 Cassandra 中获取具有公共前缀的键范围
我想使用 hector API 获取具有公共前缀的所有行。我玩了一下 RangeSuperSlicesQuery 但没有找到让它正常工作的方法。关键范围参数是否可以与通配符等一起使用?
更新:我使用 ByteOrderedPartitioner 而不是 RandomPartitioner,它工作得很好。这是预期的行为吗?
I want to fetch all rows having a common prefix using hector API. I played with RangeSuperSlicesQuery a bit but didn't find a way to get it working properly. Does key range parameters work with wild cards etc?
Update: I used ByteOrderedPartitioner instead of RandomPartitioner and it works fine with that. Is this the expected behavior?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,这是预期的行为。在 RandomPartitioner 中,行按照其键的 MD5 哈希顺序存储,因此要获得有意义的键范围,您需要使用像 ByteOrderedPartitioner 这样的保序分区器。
但是,使用 ByteOrderedPartitioner 或 OrderPreservingPartitioner 也有缺点通常可以使用稍微不同的数据模型和 RandomPartitioner 来避免这种情况。
Yes, that's the expected behavior. In RandomPartitioner, rows are stored in the order of the MD5 hash of their keys, so to get a meaningful range of keys, you need to use an order preserving partitioner like ByteOrderedPartitioner.
However, there are downsides to using ByteOrderedPartitioner or OrderPreservingPartitioner that you can usually avoid with a slightly different data model and RandomPartitioner.
要详细说明上述答案,您应该考虑使用列名作为“公共前缀”而不是键。然后,您可以使用列切片来获取特定范围内的所有列名称,也可以使用二级索引,然后为具有该列名称的所有键执行索引切片。
To elaborate on the above answer, you should consider using column names as your "common prefix" instead of the key. Then you can either use a column slice to get all column names in a certain range, or you could use a secondary index then do an indexed slice for all keys with that column name.