按顺序从Cassandra中检索结果

时间:2012-08-06 08:01:22

标签: java cassandra hector cassandra-0.7

我已将数据存储在Cassandra数据库的ComparatorType.BYTESTYPE中。现在我想以存储的顺序检索数据。

我在Hector中使用以下代码来获取数据,但查询结果似乎没有排序。

Keyspace keyspace = HFactory.createKeyspace("ClusterName", cluster);

Map<String, String> resultMap = new HashMap<String, String>();

SliceQuery<String, String, String> query = HFactory.createSliceQuery(keyspace,   StringSerializer.get(), StringSerializer.get(), StringSerializer.get());
query.setColumnFamily("ColumnFamilyName").setKey("RowKey")
.setRange("", "", false, Integer.MAX_VALUE);
QueryResult<ColumnSlice<String, String>> result = query.execute();

for (HColumn<String, String> column : result.get().getColumns()) {
        resultMap.put(column.getName(), column.getValue());
}

我错过了什么?我是否必须使用RangeSliceQueries和OrderedRows?

提前致谢。

2 个答案:

答案 0 :(得分:1)

这完全取决于您为列名设置的比较器。 如果它也是BytesType(cassandra的默认值),那么它将不是您期望的顺序。

如果你想按字母顺序排列,你应该在cassandra-cli中用类似的东西定义你的表:

使用比较器= UTF8Type;

创建列族ColumnFamilyName

或者你还在及时做

使用比较器= UTF8Type;

更新列族ColumnFamilyName

答案 1 :(得分:0)

感谢您的回答。

但是我通过将集合更改为LinkedHashMap而不是HashMap来解决它。我注意到了

    result.get().getColumns()

按顺序给出结果,但由于HasMap不保留插入顺序,因此结果无序。 因此,当您将HashMap更改为LinkedHashMap时,上述代码可以正常工作。

    Map<String, String> resultMap = new LinkedHashMap<String, String>();