cockroachdb - 如何在 CockroachDB 中构造数组数据以获得最佳性能?
问题描述
CockroachDB 不允许对数组字段进行索引,这意味着我们可能必须使用查找表来解决这个限制。但是因为每个查询只能处理一个索引(假设这也适用于连接),如果双方都包含大量记录(例如,数以亿计),性能会下降。
例子:
一个虚构的表格包含许多新闻文章记录和每篇文章包含的主题标签。我们想同时查询两者,例如通过article AND hashtags
. 由于似乎没有办法索引hashtags []
(真的没有办法吗?),查询引擎会首先找到匹配的文章,然后迭代这些以查找匹配的主题标签。如果许多文章匹配,则遍历将失败或变慢。
现在让我们规范化hashtags []
为一个查找表。我们将使用JOIN
. 让我们再次假设两边都有数以亿计的记录。我猜数据库引擎要么使用左边的数组,要么使用右边的数组,然后在不使用索引的情况下再次走到另一边,这也会不利于性能。
实际上,两边还有更多的字段需要查询,但为了简单起见,我降低了这个例子的复杂度。
有没有我可以使用的数据结构,它允许 CockroachDB 使用相同的索引来处理查找的两边,一个倒排索引结构,任何可以帮助提高查询性能的东西,这样就不会遍历过多的记录?
注意:我没有对此进行测试,因为我认为只有几条测试记录的性能会非常好,并且随着数据量的增长,性能会下降很多。
解决方案
推荐阅读
- java - 如何使用 Java11 在远程机器中创建文件/目录
- android - 在片段中隐藏状态栏或使片段全屏
- python - 如何在 mySQL 中显示来自两个不同表的值?
- sql - 带有数字的sql前缀
- php - How to output the necessary rows from the table?
- node.js - ES6 模板字符串不适用于 MongoDB
- android - BaseActivity 对象为空且 onAttach 方法在 BaseFragment 中不起作用
- javascript - 三.SpriteCanvasMaterial 不是构造函数 | 角 7
- .net-core - 哪个 .NET Core SDK 用于 VS 16.4 中的 .NET Core 2.2?
- azure - 在我的本机应用程序中无法访问构建变量