2016-07-23 5 views
2

Ich bin neu in Cassandra und komme aus Postgres. Ich habe mich gefragt, ob es eine Möglichkeit gibt, Daten aus zwei verschiedenen Tabellen oder einer Spaltenfamilie zu erhalten und dann die Ergebnisse zurückzugeben. Ich habe diese AbfrageCassandra Wie kann ich eine Join-Anweisung simulieren

select p.fullname,p.picture s.post, s.id, s.comments, s.state, s.city FROM profiles as p INNER JOIN Chats as s ON(p.id==s.profile_id) WHERE s.latitudes>=28 AND 29>= s.latitudes AND s.longitudes 
    ">=-21 AND -23>= s.longitudes 

Die Abfrage hat zwei Tabellen: Profile und Chat, und beide teilen sich ein gemeinsames Feld Chats.id == Proifles.profile_id kocht es wieder diese nach unten grundsätzlich alle Zeilen, in denen Chat-ID ist entspricht der Profil-ID. Ich würde es gerne so behalten, denn das Aktualisieren von Profilen ist einfach und würde nur 1 Zeile pro Profilupdate erfordern, anstatt alles zu deseglementieren und Tausende von Datensätzen zu aktualisieren. Jede Hilfe oder Vorschläge wären großartig

Antwort

2

Sie müssen Tabellen so entwerfen, dass Sie keine Joins benötigen. Best Practice ist, wenn Ihre Tabelle genau dem Anwendungsfall entspricht, für den sie verwendet wird.

Cassadra hat eine Funktion namens shared static columns; Auf diese Weise können Sie Werte mit dem Partitionsteil des Primärschlüssels binden. So können Sie eine "verbundene" Version der Tabelle ohne Duplikate erstellen.

CREATE TABLE t (
    p_id uuid, 
    p_fullname text STATIC, 
    p_picture text STATIC, 
    s_id uuid, 
    s_post text, 
    s_comments text, 
    s_state text, 
    s_city text, 
    PRIMARY KEY (p_id, s_id) 
); 
+0

Vielen Dank, dass perfekt ist – user1591668

Verwandte Themen