0

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

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

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

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

4

2 回答 2

2

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

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

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

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

于 2012-04-23T13:26:13.587 回答
0

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

于 2012-04-21T14:31:35.230 回答