如何在Cassandra中安排数据以最后输出格式获取数据

时间:2012-04-21 14:14:31

标签: cassandra phpcassa cassandra-0.7

由于我们无法对Cassandra中的数据进行排序,我想以这样的格式存储数据:当我检索数据时,我需要以“先进先出格式”获取数据,即如果用户在检索数据时输入注释,我应首先获得最新的评论,然后是较早的评论。我认为这与比较器有关。

我在配置Cassandra时设置了以下内容:

assume posts comparator as utf8;
assume posts validator as utf8;
assume posts keys as utf8;

请帮助 - 我应该如何创建列以时间格式排列数据,以便先存储最新数据?

2 个答案:

答案 0 :(得分:2)

行中的列始终排序,您可以按相反的顺序迭代行中的列。鉴于这两个fac,我们可以通过将注释存储在名为“comments”的列族中来模拟您所描述的情况,其中行键是帖子ID,列表示对应帖子的注释。列是时间戳(ISO格式的日期,UNIX时间戳或时间UUID),值是注释文本正文。

如果您现在获取一行的列并指定您想要它们以相反的顺序,您将得到您想要的。如何指定反向顺序取决于您的驱动程序,但它通常只是检索行或列切片的命令的选项。

另一种更为hackish的方法是获取帖子的UNIX时间戳,然后从大整数中减去它,如2 ^ 31,并将其用作列键。这样,默认情况下,列将按相反的顺序排序。它不漂亮,上面的方法更优雅。

如果您担心使用时间戳,因为可能会发生两次评论完全同时发布的冲突,请使用Cassandra的时间UUID类型。

答案 1 :(得分:0)

您需要组织数据,使比较器成为时间戳。您可以按自然顺序存储数据,并在切片查询中指定相反的顺序。