2016-04-06 3 views
1

Ich versuche, die Cassandra-Tabellen für das folgende Problem zu definieren.
Ich habe die folgenden Beziehungen:
Ein Benutzer (user_id) kann viele hinzufügen (add_id).
Ein add (id) kann von mehr als einem Benutzer gesehen werden.
Wie modelliert man viele zu viele Beziehung in Cassandra 3.0 mit Leistung im Kopf

Und ich möchte die folgenden querys in cassandra machen:

  1. Bei einem Benutzer (user_id) gib mir all die Adds (add_id), dass der Benutzer
  2. Bei einer add (add_id) sah geben mir alle Benutzer (user_id), die das

Die aproach ich war hinzufügen sah nahm zwei Tabellen whith die Beziehungen erstellen

CREATE TABLE adds_by_user (
    user_id text, 
    add_id text, 
    PRIMARY KEY (user_id, add_id) 
); 

CREATE TABLE user_by_add (
    add_id text, 
    user_id text, 
    PRIMARY KEY (add_id, user_id) 
); 

Mein Algorithmus die folgenden
Bei einer User_id tun:

  1. Gib mir all die add_id, dass der Benutzer beobachtet.
  2. für jede add_id, gib mir das alles User_id, die beobachtete, dass add_id
  3. für jede user_id, gib mir all die add_id, die jeder Benutzer

Eine weitere grafische beobachtet So sieht man es:

(eins) user_id -> (viele) add_id -> (viele +) user_id -> (viele ++) add_i d

Die Probleme entstehen, wenn ich viele Beziehungen habe und der Algorithmus eine Menge Zeit mit allen Abfragen verbringt (trotz der Tatsache, dass jede einzelne Abfrage in 0,5 Millisekunden oder weniger erfolgt, aber es gibt eine Menge sie)

ich verwende bereits Asynchron-Abfragen

gibt es ein Modell, das ich die Abfragen schneller machen?

Gibt es ein Modell, mit dem der Algorithmus weniger Abfragen ausführen und die Cassandra-Standards einhalten wird?

Danke !!

+0

zu sehen Es sieht aus wie Sie versuchen, einen Knoten/Graph-Datenbank-Struktur wie Neo4j zu passen, in cassandra . Es gibt einen guten Weg, dies zu lösen. –

+0

Hallo @AbhishekAnand Sory, dass ich deine Antwort nicht verstehen werde, du sagst, dass es einen guten Weg gibt, dies in Cassandra zu lösen, oder du sagst, dass ich neoj4 für dieses Modell benutzen muss? –

Antwort

1

Beispiel für Datenmodell:

CREATE TABLE user_address_user(
    user_id text, 
    address_id text, 
    user_level2 text, 
    address_level2 text, 
    PRIMARY KEY((user_id), address_id, user_level2, address_level2) 
); 

Diese Tabellenstruktur kann als

Map<user_id, SortedMap<address_id, SortedMap<user_level2, SortedSet<address_level2>>>>

+0

Hallo @doanduyhai, ich denke, die Lösung, die Sie vorschlagen, ist, wenn ich zu viel Zeit schreibe die Beziehungen, aber das Problem, das ich habe, ist nicht in der ** Schreibzeit **, das Problem ist in der ** Lesezeit **. –

+0

Siehe meine aktualisierte Antwort oben – doanduyhai

Verwandte Themen