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

Mar*_*ele 6 database cql3 cassandra-2.0

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

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

CREATE TABLE fan (
    id text PRIMARY KEY,
    given text,
    surname text,
)
Run Code Online (Sandbox Code Playgroud)

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

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

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

<similarly for fan>
Run Code Online (Sandbox Code Playgroud)

但似乎它们适用于小型设备,我没有看到一种方法来检查风扇是否与一个演员有关而没有完全加载任何一套.

我找到的第二个选择是制作两个映射表,每个映射表用于每个关系方向:

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

<similarly for fan_actor>
Run Code Online (Sandbox Code Playgroud)

这会让我有能力获得演员的粉丝列表并检查特定的人是否是某个演员的粉丝?有很多关于Cassandra的文档,但它通常与旧版本有关,并且版本之间似乎存在很多差异.

小智 6

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

看看这个数据建模教程,这将有助于理解这些事情:

数据建模教程

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