astyanax可以返回有序的列名吗?

时间:2013-03-07 18:12:56

标签: java cassandra astyanax

使用com.netflix.astyanax,我按如下方式添加给定行的条目:

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

稍后我用:

检索我的所有列
  final OperationResult<ColumnList<String>> operationResult = keyspace
          .prepareQuery(columnFamily).getKey(key).execute();
  operationResult.getResult().getColumnNames();

以下内容正确返回我添加的所有列,但未在数据库中输入列时对列进行相应排序。由于每列都有一个与之关联的时间戳,因此应该有一种方法可以做到这一点,但我没有看到它。有吗?

注意:如果没有,我可以随时将上面的代码更改为:

columnList.putColumn(ip,new Date());

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

2 个答案:

答案 0 :(得分:0)

我从PlayOrm知道,如果你做了列切片,它会按顺序返回。事实上,playorm使用它可以在分区中启用S-SQL,并且基本上按照顺序或逆序返回列切片,具体取决于请求的方式。您可能希望执行从0到MAXLONG的列切片。

我不确定是否获得了这一行。我没试过。

哦,PlayOrm只是astyanax上的一个映射层,虽然不是真正的关系,而且更多的是noSql',真的如它的模式页面所示

http://buffalosw.com/wiki/Patterns-Page/

答案 1 :(得分:0)

Cassandra永远不会按“插入顺序”命令您的列。

列始终排在最低位置。它还取决于cassandra如何解释您的列名。您可以使用在定义列族时设置的比较器来定义解释。

根据您提供的内容,您会看到使用String时间戳值。如果您只是将时间戳序列化为例如“123141”和“231”应注意使用UTF8Type比较器“231”&gt;“123131”。

更好的方法:使用基于时间的UUID作为列名,就像Cassandra提出的时间序列数据的许多示例一样。然后你可以使用UUIDType比较器。

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