3

列ファミリーまたはキースペースからすべてのデータを取得する方法はありますか?

データベースに作成されたすべてのエントリのすべてのキーを知らなければ、これを行う方法を考えることはできません。

私の問題は、各メッセージが独自のIDを持つTwitterクローンを作成し、それらを同じ列ファミリーの同じキースペースに格納しようとしていることです。

しかし、どうすればそれらを取り戻すことができますか?すべてのIDを追跡する必要がありますが、それはおそらく機能しません。

任意のヘルプ/アイデアをいただければ幸いです。

4

2 に答える 2

4

を使用して列ファミリーからすべてのデータを取得できますget_range_slices。範囲の開始と終了を同じ値に設定して、すべてのデータが必要であることを示します。

便利なHectorの例はまだ見つかりませんが、RangeSlicesQueryを使用していると思います...

ただし、なぜこれを実行するのかは明確ではありません。この種のアプリケーションでは、通常、IDでメッセージを検索し、インデックスを使用して必要なIDを判別します。たとえば、すべてのメッセージを一覧表示する各ユーザーの行を保存します。たとえば、メッセージ列ファミリには、次のようなものがあります。

MsgID0001 -> time     text
             1234567  Hello world
MsgID0300 -> time     text
             3456789  LOL ROTFL 

次に、「user2msg」列ファミリーにメッセージを保存します。おそらくタイムスタンプ列名を使用して、メッセージが時間順に並べ替えられて保存されるようにします。

UserID001 -> 1234567   3456789  
             MsgID0001 MsgID0300

次に、これを使用して特定のユーザーのメッセージを検索し、場合によっては時間でフィルタリングすることができます。

次に、ユーザープロファイルなどを保存するためにさらに列ファミリーが必要になります。

おそらく、質問にさらに詳細を追加する必要がありますか?

コメントに応じて更新:はい、行ごとに1つのメッセージがある場合は、各メッセージを個別に取得する必要があります。しかし、あなたの選択肢は何ですか?すべてのメッセージを取得することは、メッセージのバッチ処理を行う場合にのみ役立ちます。たとえば、ユーザーに最近のメッセージを表示する場合には役立ちません。すべてのメッセージの取得には非常に長い時間がかかる可能性があることに注意してください。すべてのメッセージを取得する理由と、それらすべてで何をするのかについては説明していません。何通のメッセージを期待していますか?

1つの可能性は、非正規化することです。つまり、ユーザーごとに1行ずつメッセージ全体を保存するため、メッセージごとに個別のルックアップ手順を実行する必要はありません。ただし、これにより、必要なストレージの量が2倍になります。

于 2012-02-22T21:03:02.537 に答える
4

私が探していた答えは、cassandraのクエリ言語であるCQLです。それは私が後の関数imに必要なものであるSQLと同様に機能します。

このリンクにはいくつかの優れたチュートリアルがあります。

于 2012-02-26T16:51:06.173 に答える