【问题标题】:Modeling many-to-many relations in Cassandra 2 with CQL3使用 CQL3 在 Cassandra 2 中建模多对多关系
【发布时间】:2014-12-21 18:52:27
【问题描述】:

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

【问题讨论】:

    标签: database cassandra-2.0 cql3


    【解决方案1】:

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

    HTH,卡罗

    【讨论】:

      【解决方案2】:

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

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

      Data modelling tutorials

      我也看到你提到了集合。顺便说一句,虽然它不能回答您的问题,但您可能想了解一些新功能,例如:http://www.datastax.com/dev/blog/cql-in-2-1

      【讨论】:

      • 感谢您的链接。不同版本的 Cassandra 在功能方面差异很大(Cassandra 1.2 及更高版本看起来与早期版本完全不同),因此很容易找到不完整或过时的文档。
      猜你喜欢
      • 2015-05-08
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多