给出一个Cassandra数据库,是否有一种以FIFO方式提取记录的机制,以便可以按插入时间的升序读取记录。我基本上需要批量读取N个最旧的行,处理它们并在处理完成后删除批处理。在Cassandra中实现FIFO读取
据我了解,列按其类型排序(由CompareWith指定),行按其分区程序排序。
我可以使用OrderPreservingPartitioner按照插入时间的升序对我的行进行排序吗?我在一个节点上运行Cassandra,所以我不担心密钥的分配。如果可以使用OrderPreservingPartitioner,应该如何配置我的密钥的排序标准,以便记录按照插入的升序进行维护?
另外,Hector是否提供了一种机制来总是获取行,使得最早的行被首先获取?
编辑:
阅读rs_atl的文章后,我有更多的疑惑:
如果我正确理解这一点,我将创建一个列族与TimeUUIDType作为比较。然后我将不得不使用时间戳列名。我脑海中出现的直接问题是如何为列名定义排序顺序(升序还是降序)?我可以在创建列家族时做到这一点,或者我必须通过客户端API来做到这一点?
如果我决定使用'小时'作为我的碎片间隔,即如果我将小时追加到我的键上,如何检索最长时间的行?
“因为卡桑德拉不支持事务”这并不完全正确。 Cassandra以原子方式更新单个行键的所有列。这是您获得的唯一交易保证。 – Sarge
@Sarge:是的,你当然是对的,但他可能需要的那种交易是不被支持的。尽管实际上传统的RDBMS风格的交易也不能完全解决问题。他真正需要的是类似队列的保证,或者像Zookeeper这样的分布式锁。 –
为了清晰起见,我已更新该帖子。 –