【发布时间】:2019-09-11 06:52:10
【问题描述】:
我想在 Cassandra 中有一个表,它有一个分区键,比如列“A”,列说“B”,它是“集合”类型,集合中最多可以有 10000 个元素。
但是当我从该表中检索一行时,会立即检索整个集合,因此 JVM 堆迅速增加。所以我应该坚持这个模式还是使用其他模式,其中'A'是分区键,我为我的另一个模式中的集合中的每个元素创建动态列说'B1','B2'.....'B10, 000'其中每一列都是一个聚类键。
请推荐哪种架构最适合并提供最佳性能。
注意:cqlsh 5.0.1v
【问题讨论】:
-
几个问题:这 10,000 个元素是完整的列表吗?换句话说,每一行是否有多达 10k 个相同的元素?或者每行是否有可能有 10k 个不同的元素(即第 1 行有 10k 个元素,第 2 行有 10k 个元素,但与第 1 行完全不同的 10k,等等)?您需要多久阅读/查看这些元素以及所有元素?如果它不经常并且每行的元素列表相同,则可以创建一个单独的表,其中分区键是元素,并在另一个表上使用“掩码”列来标记哪些元素适用于该行。只是一个想法
-
不,正如您在第二个场景中提到的,它们几乎是每一行的 10k 个不同元素,而且插入会经常进行,而读取将不经常执行。
-
先生,等待您的回复。
-
根据您告诉我的内容以及我所读到的有关集合的所有内容,拥有 10k 的集合(列表、地图、集合)并不是一个好主意。您可以简单地创建两个表 - 一个包含除集合之外的所有内容,第二个表将具有与第一个表相同的分区键,并且集合名称作为集群列。将集合/列表变成行。您必须遍历所有行以获取整个列表,但应该很快,因为它们具有相同的分区键(节点)。例如,您不能仅通过元素名称进行查询。总是需要主表的分区键
标签: cassandra