【问题标题】:Regarding suggestion of best schema for a cassandra table?关于 cassandra 表的最佳模式的建议?
【发布时间】: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


【解决方案1】:

根据您所描述的内容以及我阅读的文档,我不会创建包含 10k 个元素的集合。相反,我将有两个表,一个包含除集合之外的所有内容,然后使用第一个表的主键值作为第二个表的分区键列;添加元素名称(或任何可用于标识单个元素的名称)作为聚类列。

因此,对于给定的查询,如果您想要特定主键值的所有内容(包括所有元素),您可以使用主键查询第一个表,获取您需要的任何内容,然后再点击第二个表,循环/获取所有元素。

如果查询仅对分区键(而不是主键 - 即检索多行)提供过滤器,则第一个查询必须检索构成每行主键的所有列,然后查询第二个所有元素的表循环 - 这里是嵌套循环 - 从第一个表中检索到的每个主键记录一个循环,第二个循环抓取每个 pk 记录的所有元素。

这可能是最好的方法。这就是我可能会解决这个问题的方式。

这有意义吗?

-吉姆

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    相关资源
    最近更新 更多