2016-04-15 9 views
0

Ich versuche Cassandra Modellierung zu lernen, indem Sie auf die Twissandra project.Apache Cassandra - Folgen/Nicht folgen der Beziehung auf Twissandra Beispiel

Es scheint, dass, wenn der Benutzer einen seiner Follower nicht mehr aufruft, nur die Freundschaft/Follower-Beziehung aus den Tabellen entfernt wird, aber Tweets des nicht gefolgten Benutzers bleiben in der Timeline des Benutzers, der ihn gerade nicht berührt hat.

Auch mit sehr grundlegenden Kenntnissen von Cassandra Modellierung, die ich derzeit habe, scheint es mir, dass es praktisch unmöglich ist, Tweets aus der Timeline zu entfernen. Hier ist das Modell von Twissandra:

CREATE TABLE timeline (
    username text, 
    time timeuuid, 
    tweet_id uuid, 
    PRIMARY KEY (username, time) 
) WITH CLUSTERING ORDER BY (time DESC) 

Da tweet_id ist weder eine Partition Schlüssel noch eine Clustering-Spalte es unmöglich ist, indem sie sie abfragen und den Datensatz zu löschen.

Weiter kann jemand bitte ein Modell vorschlagen, wo es möglich wäre, Tweets der unfollowed Benutzer von der Timeline zu entfernen.

Ich habe mich für einen Tag mit diesem Problem herumgeschlagen und es scheint, als ob das in Cassandra nicht so einfach ist. Ich komme aus der relationalen Welt, also ist mein Standpunkt vielleicht auch falsch.

Antwort

0

Da tweet_id weder ein Partitionsschlüssel noch eine Clustering-Spalte ist, ist es unmöglich, danach zu fragen und den Datensatz zu löschen.

CREATE TABLE timeline (
    username text, 
    tweet_id timeuuid, 
    tweet_content text 
    PRIMARY KEY (username, tweet_id) 
) WITH CLUSTERING ORDER BY (tweet_id DESC) 

Das sollte über Datenmodell

Weiteres den Trick tut, kann jemand bitte ein Modell vorschlagen, wo es möglich wäre, Tweets des unfollowed Benutzers aus der Timeline zu entfernen.

Du musst

CREATE TABLE followed_users_tweets(
    username text, 
    followed_user text, 
    tweet_id timeuuid, 
    tweet_content text 
    PRIMARY KEY ((username,followed_user) tweet_id) 
) WITH CLUSTERING ORDER BY (tweet_id DESC); 

einer anderen Tabelle denormalize und erstellen Wenn Sie unfollow "John Doe" und Ihr Benutzername ist "Helen SUE":

DELETE FROM followed_users_tweets WHERE username='Helen SUE' AND followed_user='John DOE'

+0

Vielen Dank für die Antworten. Das Ändern der Tweet_id zu Timeuuid würde den Trick tun, aber ich würde alle Tweet_ids des unfolgeloggten Benutzers auswählen und dann eine Löschung basierend auf diesen Tweet_ids ausstellen müssen. Wenn der Benutzer zu viele Tweets hat, könnte dies ein Problem sein. Was wäre der Anwendungsfall für die Tabelle "folged_users_tweets", die Sie vorgeschlagen haben? Ich brauche irgendwie die Tweets aus der Timeline zu entfernen, also würde ich wieder alle Tweets des Benutzers auswählen müssen, die ich nicht mehr anzeigen möchte und dann ein Delete in der Timeline-Tabelle mit diesen IDs ausstellen. Ich bin mir nicht sicher, ob das funktionieren würde. – Milan