使用CQL3对Cassandra 2中的多对多关系进行建模

时间:2014-10-26 13:00:37

标签: database cassandra-2.0 cql3

使用CQL3建立多对多关系的规范方法是什么? 假设我有表格

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

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

我想模仿一个演员可以有很多粉丝的事实,每个粉丝都可以喜欢很多演员。

我的第一个想法是使用sets,如下所示(以及粉丝的另一种方式):

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的文档,但它通常与旧版本有关,并且版本之间似乎存在很多差异。

2 个答案:

答案 0 :(得分:4)

在Cassandra中执行此操作的正确方法是将数据非规范化为2个表。您不必担心必须在每张桌子上写两次,因为Cassandra旨在快速处理写入以支持此类模型。

看一下有助于理解这些内容的数据建模教程:

Data modelling tutorials

我也看到你提到了套装。作为附注,虽然它不是您问题的答案,但您可能希望了解一些新功能,例如:http://www.datastax.com/dev/blog/cql-in-2-1

答案 1 :(得分:1)

实现它的方法是对数据进行非规范化,从而创建actors_by_fansfans_by_actors。你也可以使用套装,但这有你已经提到的限制。

HTH,Carlo