如何在Cassandra中排列数据以获得后进先出格式的数据

如何在Cassandra中排列数据以获得后进先出格式的数据,cassandra,phpcassa,cassandra-0.7,Cassandra,Phpcassa,Cassandra 0.7,由于我们无法在Cassandra中对数据进行排序,所以我希望以这样的格式存储数据:当我检索数据时,我需要以“后进先出”的格式获取数据,即如果用户在检索数据时输入注释,我应该首先获取最新的注释,然后再获取较旧的注释。我想这和比较仪有关 我在配置Cassandra时设置了以下内容: assume posts comparator as utf8; assume posts validator as utf8; assume posts keys as utf8; 请帮助-我应该如何创建列以时间格式

由于我们无法在Cassandra中对数据进行排序,所以我希望以这样的格式存储数据:当我检索数据时,我需要以“后进先出”的格式获取数据,即如果用户在检索数据时输入注释,我应该首先获取最新的注释,然后再获取较旧的注释。我想这和比较仪有关

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

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

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

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

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

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

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


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

我的意思是松散地使用术语“时间戳”。只要列的自然顺序可以按时间排序,该技术就可以正常工作。一个序列号就可以了。但如何告诉cassandra根据时间戳排序我的意思是在我的机器上按字母顺序排序一个基本结构是columnfamily[key][name]=value,其中值可以是一个序列化记录,比如JSON或doc,也可以是CSV字符串。若名称只是一个数字ID,那个么它应该可以工作。您可以使用bigint并从epoch存储毫秒。该列不必是字符串,但如果您希望它是字符串,您可以将日期字符串格式化为
yyymmddhhmmss.SSS
,这样可以按时间顺序按字母顺序排序。与其使用时间戳的历元-时间戳来获得相反的顺序,不如使用反向比较器:。它也很容易与TimeUUIDType一起工作。甚至更好!我不知道。