16

考虑需要在 Cassandra 数据存储中表示的 M:M 关系。

有哪些 M:M 建模选项可用?对于每种选择,什么时候更喜欢?您在 Cassandra 支持的项目中做出了哪些 M:M 建模选择?

4

2 回答 2

16

不是像使用 rdbms 那样使用连接表,而是有一个 ColumnFamily,其中包含每个 X 的一行和一个与之关联的 Y 列表,然后是一个 CF,其中包含每个 Y 的一行和一个关联的每个 X 的列表用它。

如果事实证明您并不真正关心查询其中一个方向,那么只保留您关心的 CF。

于 2010-04-09T16:07:19.413 回答
2

Cassandra 在设计上是键值数据库,所以要实现 M:M 有两种方法可以做到。

  1. 非规范化您的数据,因此每个关系都应该复制数据。

    IE。x->y(value) 和 x->z(value) 和 a->y(value)

    y 应保存为 x 和 a

    这就是应该做的,因为它给了你数据库的力量

  2. 将关系键的引用保存为值。

    x->y(key) 和 x->z(Key) 和 a->y(Key)

    因此,如果您需要具有 y 值的 x,它应该是两个操作,获取 x 它将为您提供 y 值。然后在单独的操作中获取 y 本身。

Cassandra 不是 RDBMS,所以不要通过删除值和定义关系来围绕传统方式进行操作。

于 2010-04-07T15:58:11.197 回答