2014-10-26 9 views
5

Was ist der kanonische Weg, viele-zu-viele-Beziehungen mit CQL3 zu modellieren? Lassen Sie uns sagen, dass ich zu Tische habenModellierung von Viele-zu-Viele-Beziehungen in Cassandra 2 mit CQL3

CREATE TABLE actor (
    id text PRIMARY KEY, 
    given text, 
    surname text, 
) 

CREATE TABLE fan (
    id text PRIMARY KEY, 
    given text, 
    surname text, 
) 

und ich möchte die Tatsache modellieren, dass ein Schauspieler viele Fan haben kann und jeder Fan viele Schauspieler wie kann.

Die erste Idee, die mir in meinem kam, war sets, wie in den folgenden (für Fans und umgekehrt) zu verwenden:

CREATE TABLE actor (
    id text PRIMARY KEY, 
    given text, 
    surname text, 
    fans set<text> 
) 

<similarly for fan> 

aber es scheint, sie sollen für kleine Mengen, und ich sehe keinen Weg, um zu überprüfen, ob ein Lüfter mit einem Aktor verbunden ist, ohne dass beide vollständig geladen sind.

Die zweite Wahl wäre ich fand zwei Mapping-Tabellen zu machen, die jeweils für jede Relation Richtung:

CREATE TABLE actor_fan (
    text actor, 
    text fan, 
    PRIMARY KEY(actor,fan) 
); 

<similarly for fan_actor> 

Würde dies die Möglichkeit geben, mich sowohl die Fan Liste der Schauspieler und überprüfen, ob eine bestimmte zu bekommen Person ist ein Fan eines bestimmten Schauspielers? Es gibt eine Menge Dokumentation über Cassandra, aber es ist oft mit älteren Versionen verwandt und es scheint viele Unterschiede zwischen den Versionen zu geben.

Antwort

4

Der richtige Weg, diese in Cassandra zu tun ist, Denormalisierung der Daten in zwei Tabellen. Sie sollten sich keine Sorgen machen, zweimal auf jeder Tabelle schreiben zu müssen, denn Cassandra ist so konzipiert, dass es sehr schnell schreibt, um ein solches Modell zu unterstützen.

Werfen Sie einen Blick auf diese Datenmodellierung Tutorials, die diese Dinge zu verstehen helfen:

auch

Data modelling tutorials

Auch ich sehe dich Sätze erwähnt. Nur als eine Randnotiz und obwohl es keine Antwort auf Ihre Fragen ist, möchten Sie vielleicht einige neue Features wie kennen: http://www.datastax.com/dev/blog/cql-in-2-1

+0

Danke für die Links. Verschiedene Versionen von Cassandra unterscheiden sich sehr in Bezug auf die Funktionen (Cassandra 1.2 und höher sieht aus wie ein komplett anderes Produkt als frühere Versionen), so dass es ziemlich einfach ist, unvollständige oder veraltete Dokumentation zu finden. –

1

Der Weg, um es zu erreichen, ist Denormalisierung Daten erstellen actors_by_fans und fans_by_actors. Sie können auch Sets verwenden, aber diese haben Einschränkungen, die Sie bereits erwähnt haben.

HTH, Carlo

Verwandte Themen