2012-02-15 11 views
4

私たちは、カサンドラにセッションIDとURLを保存して、私たちのウェブサイトでクリックしたリンクを追跡しようとしています。最後の10人の訪問者(セッションID)を1ページに表示し、ページを通した旅行を時間順にリストしたいと考えています。次のようにカサンドラ:過去10人のユーザーの訪問

「スキーマ」は次のとおりです。URLをクリックさせることができるので

セッションIDは、各行は、タイムスタンプが名前である列が含まれていて、URLが値である キー列です(私たちはこれを行います

私たちは、行キー "lastseen"を含む別の列ファミリを持っています。そこでは、列名はタイムスタンプで、値はsessionIdです。私たちはウェブサイトに表示されているように、セッションIDの順番付けが必要なので、これを行いました。

したがって、ユーザーがリンクをクリックすると、最後の行にタイムスタンプ/セッションIDのキー値のペアが格納されます。ユーザーセッションIDの行にtimestamp/urlを持つ別のエントリ。

考え方は、lastseen行の最後の10個のエントリを照会し、対応するセッションID行でそのセッションIDがクリックしたURLを検索するというものです。ただし、最後に表示された行に重複した値があります。つまり、最後の10回のクリックを行った同じユーザーが同じセッションIDを10回戻します。

セッションID行に最後に見たカラム名がある別のスキーマを試してみました。それにインデックスを付け、現在の時間インデックスの式をオンにしましたが、現時点ではcassandraはこれをサポートしていません。

これを効率的に解決する方法はありますか?私たちは、挿入物やそれに類するものについて重複がないかどうかを確認することができますが、それはちょうど醜いようであり、高負荷でどのように振る舞うかは不明です。重複がある場合は手動で100行とフィルタを取得できますが、それでも醜いです。

紛失していることが明らかですか?

トム

答えて

3

は、私が最も簡単な解決策は、あなたがすでに考えてきたものだと思う - 「最近の活動」とは、その列名活動時間であり、値はセッションIDですCF、およびスキャンを持っていますそれはあなたが10の一意の値を得るまで後方に移動します。

Cassandraで一意化を実行するには、代わりにクライアント側でソートを行う必要があります。これは、多数のユーザーに対して一定の縮尺が適用されないためです。

+1

返信いただきありがとうございます。過去24時間以内に表示されたユーザーの数(挿入時に知っている固定の時間枠)と実行時に定義されたパラメータ(管理者は時間の範囲を定義する)を報告したい場合、これは同じですか? – TomWollert