在Cassandra中坚持大型OneToMany协会的最佳方式是什么?

时间:2016-11-24 09:48:37

标签: cassandra cql nosql

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

详细而言, A B 的持久性集合,由于某些永久性的商务流程,它应该会不断变化。可能会添加一些 B ,其他一些可能会被删除。重要的是有可能以可分页的方式选择 B

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

我想这个好的解决方案是将商店 A 作为,其中列是 B 的标识。

列族A:

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

这是一个好方法吗?如何实现呢?

1 个答案:

答案 0 :(得分:2)

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

在CQL中,它可以像这样实现:

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

a b 是从分区键 a 和群集键 b 复合的主键。要插入,选择并删除一些 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.