使用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());
然后检索列值,相应地对它们进行排序,但这似乎很麻烦,效率低下而且很愚蠢,因为每列都有一个时间戳。
答案 0 :(得分:0)
我从PlayOrm知道,如果你做了列切片,它会按顺序返回。事实上,playorm使用它可以在分区中启用S-SQL,并且基本上按照顺序或逆序返回列切片,具体取决于请求的方式。您可能希望执行从0到MAXLONG的列切片。
我不确定是否获得了这一行。我没试过。
哦,PlayOrm只是astyanax上的一个映射层,虽然不是真正的关系,而且更多的是noSql',真的如它的模式页面所示
答案 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;