Ich bin neu in Cassandra und versuchen, ein Datenmodell für das Messaging-System aufzubauen. Ich habe nur wenige Lösungen gefunden, aber keine von ihnen entspricht genau meinen Anforderungen. Es gibt zwei wichtigsten Anforderungen:Design-Datenmodell für Messaging-System mit Cassandra
- Hier finden Sie eine Liste der letzten Meldungen für einen bestimmten Benutzer, von allen anderen Benutzern, sortiert nach Zeit.
- Hier erhalten Sie eine Liste der Nachrichten für die persönliche Nachrichtenhistorie, sortiert nach Zeit.
ich von so etwas wie dies dachte,
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);
Aber dieser Entwurf einige Probleme hat, wie ich in der Lage sein würde nicht erste Anforderung da diese Konstruktion erfordert passieren Von_Nutzer auch gerecht zu werden. Und dies wäre auch ineffizient, wenn die Anzahl der (to_user, from_user) Paar erhöht.
Vielen Dank für Ihre Antwort. Es wird meine beiden Anforderungen erfüllen. Aber die erste Tabelle gibt mir alle Nachrichten von allen from_users sortiert nach Zeit, das heißt, ich werde nicht in der Lage sein, Nachrichten eindeutig von verschiedenen from_users zu bekommen. Gibt es einen Weg, das zu erreichen? –
Die zweite Tabelle kann das tun. 'Wählen * aus dem Chat where to_user =' X 'und from_user =' Y '; –
Ich möchte nach allen Benutzern suchen, nicht nur from_user = Y. Wie bei einem FB-Messenger wird nur die letzte Nachricht aller from_users angezeigt, jedoch in zeitlicher Reihenfolge. –