[英]Retrieving results from Cassandra in order
我已將數據存儲在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嗎?
提前致謝。
這完全取決於您為列名設置的比較器。 如果它也是BytesType(cassandra的默認值),那么它將不是您期望的順序。
如果您想按字母順序排列,則應在cassandra-cli中使用類似的內容來定義表格:
使用比較器= UTF8Type創建列系列ColumnFamilyName;
否則你可能還沒來得及做
使用比較器= UTF8Type更新列系列ColumnFamilyName;
感謝douard的回答。
但是我通過將集合更改為LinkedHashMap而不是HashMap來解決了。 我注意到
result.get().getColumns()
按順序給出結果,但是因為HasMap不會保留插入順序,所以結果變得無序。 因此,當您將HashMap更改為LinkedHashMap時,以上代碼可以正常工作。
Map<String, String> resultMap = new LinkedHashMap<String, String>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.