首页 > 解决方案 > 如何在 CockroachDB 中构造数组数据以获得最佳性能?

问题描述

CockroachDB 不允许对数组字段进行索引,这意味着我们可能必须使用查找表来解决这个限制。但是因为每个查询只能处理一个索引(假设这也适用于连接),如果双方都包含大量记录(例如,数以亿计),性能会下降。

例子:

一个虚构的表格包含许多新闻文章记录和每篇文章包含的主题标签。我们想同时查询两者,例如通过article AND hashtags. 由于似乎没有办法索引hashtags [](真的没有办法吗?),查询引擎会首先找到匹配的文章,然后迭代这些以查找匹配的主题标签。如果许多文章匹配,则遍历将失败或变慢。

使用数组的虚拟表

现在让我们规范化hashtags []为一个查找表。我们将使用JOIN. 让我们再次假设两边都有数以亿计的记录。我猜数据库引擎要么使用左边的数组,要么使用右边的数组,然后在不使用索引的情况下再次走到另一边,这也会不利于性能。

使用查找表而不是数组的虚构表结构

实际上,两边还有更多的字段需要查询,但为了简单起见,我降低了这个例子的复杂度。

有没有我可以使用的数据结构,它允许 CockroachDB 使用相同的索引来处理查找的两边,一个倒排索引结构,任何可以帮助提高查询性能的东西,这样就不会遍历过多的记录?

注意:我没有对此进行测试,因为我认为只有几条测试记录的性能会非常好,并且随着数据量的增长,性能会下降很多。

标签: cockroachdb

解决方案


推荐阅读