Cassandraを初めて使用し、メッセージングシステムのデータモデルを構築しようとしています。私はいくつかのソリューションを見つけましたが、どれも自分の要件に正確には一致しません。Cassandraを使用したメッセージングシステムの設計データモデル
- は、時間によってソートされたすべての他のユーザーから、特定のユーザーのための最後のメッセージのリストを取得します。二つの主な要件があります。
- 1対1のメッセージ履歴のメッセージのリストを取得し、時刻順に並べ替えます。 私はこのような何かを考え
、
CREATE TABLE chat (
to_user text,
from_user_text,
time text,
msg text,
PRIMARY KEY((to_user,from_user),time)
) WITH CLUSTERING ORDER BY (time DESC);
しかし、私はこのデザインは、同様from_user渡す必要があるため最初の要件を満たすことができる文句を言わないように、この設計は、いくつかの問題があります。また、(to_user、from_user)の数が増えると効率が悪くなります。
ご回答ありがとうございます。それは私の両方の要件を満たすでしょう。しかし最初のテーブルはすべてのfrom_usersからのすべてのメッセージを時間でソートしてくれます。つまり、異なるfrom_usersからメッセージを一意に取得することはできません。それを達成する方法はありますか? –
2番目のテーブルでこれを行うことができます。 'select * from chat to_user =' X '、from_user =' Y '; –
from_user = Yだけでなく、すべてのユーザーを確認したいと思います。 fbメッセンジャーのように、すべてのfrom_usersの最後のメッセージだけがタイムリーに表示されます。 –