2011-08-02 6 views
4

ユーザオブジェクトを格納する列ファミリを持つキースペースがあり、これらのオブジェクトのキーがユーザー名であるとします。Key by Cassandra

ユーザー名でソートされたユーザーのリストを取得するにはどうすればよいですか?

RangeSlicesQueryを使用しようとしましたが、ページングは​​このクエリでうまく動作しますが、結果は決して並べ替えられません。

私は絶対的なカサンドラ初心者です。キーで列ファミリをどのようにソートするかを示す簡単な例を教えてください。私の努力の詳細が必要かどうか尋ねてください。

編集:私はcassandra.yamlに代わりOrderPreseveringPartitionerのデフォルトRandomPartitionerを使用しているため

結果がソートされていませんでした。

おそらく、キーによるソートに頼るのではなく、セカンダリインデックスを使用する方が良いでしょう。

答えて

5

引用Cassandra - The Definitive Guide

列名はcompare_withの値に従ってソートされた順序で格納されます。行は、一方 は、パーティによって定義された順序(例えば、RandomPartitionerと が、彼らはランダムな順序である、など)

私はあなたがRandomPartitioner

を使用している推測に格納されています

...本質的にランダムな順序でデータを返します。

おそらく

行は、したがって、あなたのソート順でデータの物理的な構造を合わせ、キーの順序で に保存されているOrderPreservingPartitioner (OPP)を使用する必要があります。

OPPの非効率性に注意してください。


(2014年3月7日に編集)
重要:

この答えは現在、非常に古いです。

これはシステム全体の設定です。 cassandra.yamlに設定できます。 this docを参照してください。繰り返しますが、OPPはお勧めできません。このドキュメントはバージョン1.1用であり、が表示されています。は非推奨です。最新のバージョンから削除されている可能性があります。 OPPを使用する場合は、アーキテクチャーをアーキテクチャーに戻したい場合があります。

+0

OOP(OrderPreservingPartitioner)を使用している場合、キーはあるPKによって順序付けされています。新しいデータをcassandraテーブルに挿入すると、新しい要素が正しい場所に挿入されますか? – Pinocchio

+0

どのようにしてOrderPreservingPartitionerテーブルに使用しますか? – Pinocchio

+0

キースペースやテーブルの設定に似ていますか? – Pinocchio

1

または、同じ列ファミリに「meta:userNames」という行を作成し、すべてのユーザー名をルックアップハッシュとして配置します。そんな感じ。

Users { 
    key: "meta:userNames" {david:david, paolo:paolo, victor:victor}, 
    key: "paolo" {password:"*****", locale:"it_it"}, 
    key: "david" {password:"*****", locale:"en_us"}, 
    key: "victor" {password:"*****", locale:"en_uk"} 
} 

まず(ソートされている)meta:userNames列を照会し、ユーザーの行を取得するためにそれらを使用しています。 SQLドリブンデータベースのように、単一のdbクエリですべてを取得しようとしないでください。 Cassandraをデータに素早くランダムにアクセスできる巨大なハッシュマップとして使用します。

関連する問題