基本上我有一个“线程”,其中创建了新线程,并将TimeUUID用作键。这显然很容易提供新线程的排序,特别是在查询最新的20个线程等时。
我的问题是,当一个新的'post'被创建到一个线程时,我希望能够将该线程“碰撞”到问题所在的“线程”的前面,我该如何基本上实现这一点,我仍然可以进行仍然可以按正确的顺序选择的查询,而不提供任何类型的重复等。
我能看到这个工作的唯一方法是,如果不是通过TimeUUID对列系列进行排序,我需要通过插入时间戳对列族进行排序,因此我可以使用列键的唯一线程ID并在是否插入或重新插入它们而不是TimeUUID?这是可能的还是我错过了一个允许这个的简单技巧?据我所知,你必须设置一个特定的比较器,否则它默认为字节?
答案 0 :(得分:5)
行中的列始终按名称使用给定的比较器进行排序。您无法按时间戳或值或其他任何内容进行排序,或者Cassandra无法正确地将多个更新合并到同一列。
至于你的用例,我可以想到两个选择。
与你现在正在做的最相似的是创建第二个列家族,ThreadMostRecentPosts,带有timeuuid列(你说“键”,但听起来你的意思是“列”)。当新帖子到达时,删除旧的最新列并添加一个新列。
这有两个问题:
我建议每天创建一行(例如),其列是线程ID,其值是最新的帖子。添加新帖子只会更新该列中的值;没有删除/重新添加,所以比赛不再是问题。你不再免费进行排序,但这没关系,因为你将它限制在一个足够小的集合中,你可以在内存中进行排序(比如昨天的线程和今天的)。
(最后,我想补充一点,我可以从经验中说,过了一个旧的线程没有被新的回复碰到前面的截止是好事。)