1

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 を使用する必要がありますか??

前もって感謝します。

4

2 に答える 2

1

それはすべて、列名に設定したコンパレーターに依存します。それが BytesType (cassandra のデフォルト) である場合も、期待どおりの順序にはなりません。

アルファベット順が必要な場合は、cassandra-cli で次のようにテーブルを定義する必要があります。

列ファミリ ColumnFamilyName をコンパレータ = UTF8Type で作成します。

または、まだ間に合うかもしれません

列ファミリ ColumnFamilyName をコンパレータ = UTF8Type で更新します。

于 2012-08-09T16:09:04.967 に答える
0

回答ありがとうございます。

しかし、コレクションを HashMap ではなく LinkedHashMap に変更することで解決しました。私が気づいたように

    result.get().getColumns()

結果は順番に返されますが、HasMap は挿入順序を保持しないため、結果は順不同になります。したがって、HashMap を LinkedHashMap に変更すると、上記のコードは正常に機能します。

    Map<String, String> resultMap = new LinkedHashMap<String, String>();
于 2012-08-12T10:40:13.673 に答える