cassandraを使用して、最新のアクションを持つN人のユーザーのリストを取得する必要があります。これでユーザーが最初にログインするには、新しいエントリを作成するときCassandra 2.1:N最新のアクティブなユーザーをモデル化する方法は?
CREATE TABLE user_actions(
partition_key int,
username int,
action_time timestamp,
PRIMARY KEY(partition_key, action_time)
WITH CLUSTERING ORDER BY(action_time DESC);
:
私は、次のスキーマを使用しようとしました。ただし、start_time
プロパティはクラスタリングキーとして使用されているため、更新できません。 I 古いデータを削除し、ユーザーが別の操作を実行したときに新しいエントリを作成しますが、ユーザーの操作が頻繁に発生し、すぐに墓石の限界に達するでしょう。
誰でも、これを達成するためにデータをモデル化する方法を知っていますか?
おかげでクリスすることができます - 私は先に行って、これを実装しました。しかし、1つの問題がありますが、クエリはdupesを返します。私のアプリケーションでこれらの重複を除外することはできますが、これらのダストを作成しない方法があるかどうかは疑問でした。 – cscan
フィルタリングはおそらく最も簡単なオプションです。その場合は、おそらくクエリからLIMITを削除する必要があります。ドライバのフェッチ制限は、パーティションのページングを処理します。しかし、それは悪いケースのシナリオを悪化させる可能性があります。あなたは潜在的に:((partition_key、day)、username) 'を実行することができます。これは、各ユーザーの最後のaction_timeを保存し、それを繰り返しながらトップNを維持します。私はそれが悪化すると予想しますが、それは本当にいくつのユーザーがアクティブであるかに依存します。 1日に多くのアクティブなユーザーしかいない場合、元のモデルは他のものより多く歩く必要があります –