我已将数据存储在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?
提前致谢。
答案 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>();