簡體   English   中英

按順序從Cassandra檢索結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM