您是否可以通过为每个列条目创建的Timestamp值而不是列Keys键对Cassandra列族进行GET排序?

Pet*_*Fox 2 sorting timestamp cassandra

基本上我有一个'线程',其中新线程被创建,TimeUUID用作键.这显然很容易提供新线程的排序,特别是在查询最新的20个线程等时.

我的问题是,当一个新的'post'被创建到一个线程时,我希望能够将该线程"碰撞"到问题所在的'线路'的前面,我该如何基本上实现这一点所以我仍然可以进行仍然可以按正确的顺序选择的查询,而不提供任何类型的重复等.

我能看到这个工作的唯一方法是,如果不是通过TimeUUID对列系列进行排序,我需要通过插入时间戳排序列系列,因此我可以使用列键的唯一线程ID并按照它们的顺序检索这些插入或重新插入而不是TimeUUID?这是可能的还是我错过了一个允许这个的简单技巧?据我所知,你必须设置一个特定的比较器,否则默认为字节?

jbe*_*lis 5

行中的列始终按名称使用给定的比较器进行排序.您无法按时间戳或值或其他任何内容进行排序,或者Cassandra无法正确地将多个更新合并到同一列.

至于你的用例,我可以想到两个选择.

与你现在正在做的最相似的是创建第二个列家族,ThreadMostRecentPosts,带有timeuuid列(你说"键",但听起来你的意思是"列").当新帖子到达时,删除旧的最新列并添加一个新列.

这有两个问题:

  • 复制单元是行,因此无限增长可能会有问题.(使用过期列来老化不再相关的线程信息可能有所帮助.)
  • 您需要一个锁管理器,以便同一个线程的多个帖子不会竞争,并可能在此行中留下多个条目.

我建议每天创建一行(例如),其列是线程ID,其值是最新的帖子.添加新帖子只会更新该列中的值; 没有删除/重新添加,所以比赛不再是问题.你不再免费进行排序,但这没关系,因为你将它限制在一个足够小的集合中,你可以在内存中进行排序(比如昨天的线程和今天的).

(最后,我想补充一点,我可以从经验中说,有一个截止过去旧线程不会被新回复碰到前面是一件好事.)