Java astyanax能否返回已排序的列名?

Java astyanax能否返回已排序的列名?,java,cassandra,astyanax,Java,Cassandra,Astyanax,我使用com.netflix.astyanax为给定行添加条目,如下所示: final ColumnListMutation<String> columnList = m.withRow(columnFamily, key); columnList.putEmptyColumn(columnName); 然后检索列值,对它们进行相应的排序,但这似乎很麻烦、低效且愚蠢,因为每个列都有一个时间戳。我从Playmorm知道,如果执行列切片,它会按顺序返回这些值。事实上,playorm使用

我使用com.netflix.astyanax为给定行添加条目,如下所示:

final ColumnListMutation<String> columnList = m.withRow(columnFamily, key);
columnList.putEmptyColumn(columnName);

然后检索列值,对它们进行相应的排序,但这似乎很麻烦、低效且愚蠢,因为每个列都有一个时间戳。

我从Playmorm知道,如果执行列切片,它会按顺序返回这些值。事实上,playorm使用的是在分区中启用S-SQL的方法,基本上是对列切片进行批处理,根据请求的方式,按顺序或相反顺序返回。您可能需要执行从0到MAXLONG的列切片

不过,我不确定是否会引起争吵。我还没试过

哦,PlayOrm只是astyanax之上的一个映射层,虽然它不是真正的关系层,更像它的模式页面所展示的noSql'ish


卡桑德拉永远不会按“插入顺序”对列进行排序

列总是排在最低的第一位。这还取决于卡桑德拉如何解释你的列名。可以使用定义列族时设置的比较器定义解释

从您给出的结果来看,您使用了字符串时间戳值。如果您只是将时间戳序列化为“123141”和“231”,请注意使用
UTF8Type
比较器“231”>“123131”

更好的方法:使用基于时间的UUID作为列名,正如Cassandra中的许多时间序列数据示例所建议的那样。然后可以使用
UUIDType
比较器

 CREATE COLUMN FAMILY timeseries_data
 WITH comparator = UUIDType
 AND key_validation_class=UTF8Type;

谢谢我们已经使用com.netflix.astyanax库编写了很多代码。如果我们仅仅依赖PlayOrm库,那么所有这些代码还会运行吗?如果我坚持使用astyanax库,你知道我的问题(除了我建议的解决方法)是否肯定没有解决方案吗?它很像hibernate,也很像hibernate,只是它遵循nosql模式。如果您正确定义了实体,它很可能会正确映射。此外,像hibernate一样,没有什么可以阻止您并排进行操作,并将astyanax传递给playorm,以便您可以并排使用这两种方法。与astyanax不同的是,PlayOrm还具有刷新功能,因此所有写入操作都会在最后执行,而不是在1,2,3执行(即,如果写入1后失败,在写入2之前失败,会发生什么情况?)
columnList.putColumn(ip,new Date());
 CREATE COLUMN FAMILY timeseries_data
 WITH comparator = UUIDType
 AND key_validation_class=UTF8Type;