簡體   English   中英

使用CQL3對Cassandra 2中的多對多關系進行建模

[英]Modeling many-to-many relations in Cassandra 2 with CQL3

使用CQL3建立多對多關系的規范方法是什么? 假設我必須使用表格

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

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

而且我想模仿一個演員可以有很多粉絲的事實,每個粉絲都可以喜歡很多演員。

來到我的第一個想法是使用集合 ,如下所示(以及粉絲的另一種方式):

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

<similarly for fan>

但似乎它們適用於小型設備,我沒有看到一種方法來檢查風扇是否與一個演員有關而沒有完全加載任何一套。

我找到的第二個選擇是制作兩個映射表,每個映射表用於每個關系方向:

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

<similarly for fan_actor>

這會讓我有能力獲得演員的粉絲列表,並檢查特定的人是否是某個演員的粉絲? 有很多關於Cassandra的文檔,但它通常與舊版本有關,並且版本之間似乎存在很多差異。

在Cassandra中執行此操作的正確方法是將數據非規范化為2個表。 您不必擔心必須在每個表上寫兩次,因為Cassandra旨在快速處理寫入以支持此類模型。

看一下有助於理解這些內容的數據建模教程:

數據建模教程

我也看到你提到了套裝。 作為旁注,雖然它不是您的問題的答案,但您可能想要了解一些新功能,例如: http//www.datastax.com/dev/blog/cql-in-2-1

實現它的方法是對數據進行非規范化,從而創建一個actors_by_fans和一個fans_by_actors 您也可以使用集合,但這有您已經提到的限制。

HTH,卡羅

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM