在 Cassandra 中保持大型 OneToMany 关联的最佳方法是什么?

What is the best way to persist big OneToMany association in Cassandra?

在 RDB 中 AB 之间有很大的 OneToMany 关联(大约 1 <- 100 万)。

详细来说,AB的一个持久化集,应该会因为一些永久性的业务而不断发生轻微的变化-过程。 B有的可以加,有的可以删。以可分页的方式 select B 的可能性很重要。

由于将数据存储迁移到 Apache Cassandra,正在考虑该关系的数据模型。

我想好的解决方案是将 A 作为 存储,其中列是 的标识B.

列族 A:

A->{
RowID1->{description="...", BId0="123", BId1="456", ..., BId1000000="987"},
RowID2->{description="...", BId0="123", BId1="456", ..., BId500000="888"},
...
}

这样做好吗?如何实现?

我想,从实现的简单性角度来看,这是一种好方法,但如果一个分区内有数百万行,它对于集群内的性能和数据分布可能不是最佳的。

在CQL中可以这样实现:

CREATE TABLE b_by_a ( a text, b text, description text, PRIMARY KEY (a, b) );

其中 ab 是由分区键 a 和集群键复合而成的主键b。要插入,select 和删除一些 b 你必须知道 a.

Insert INTO b_by_a (a, b, description) values ('value a', 'value b 1', '...');
Insert INTO b_by_a (a, b, description) values ('value a', 'value b 2', '...');

SELECT * FROM b_by_a WHERE a='value a';

Datastax cassandra 驱动程序提供 paging by query results

的能力

请注意一些 cassandra limitations

The maximum number of cells (rows x columns) in a single partition is 2 billion.