我有一个每次加载网站时都会运行的查询。此查询聚合了三个不同的术语字段和大约 300 万个文档,因此需要 6-7 秒才能完成。数据不会频繁更改,结果的当前性并不重要。
我知道我可以使用别名来创建类似于 RDMS 世界中的“视图”。是否也可以填充它,以便查询结果被缓存?在这种情况下,缓存是否有任何其他帮助,或者我是否必须为聚合数据创建一个额外的索引并不时更新它?
我有一个每次加载网站时都会运行的查询。此查询聚合了三个不同的术语字段和大约 300 万个文档,因此需要 6-7 秒才能完成。数据不会频繁更改,结果的当前性并不重要。
我知道我可以使用别名来创建类似于 RDMS 世界中的“视图”。是否也可以填充它,以便查询结果被缓存?在这种情况下,缓存是否有任何其他帮助,或者我是否必须为聚合数据创建一个额外的索引并不时更新它?
我知道帖子很旧,但关于视图,弹性添加数据帧在 7.3.0. 您还可以使用 _reindex api
POST /_reindex
{
"source": {
"index": "live_index"
},
"dest": {
"index": "caching_index"
}
}
但它不会改变你的摄取问题。关于这一点,我认为解决方案是为您的索引分片。有 2 个或更多的分片和多个节点,弹性将能够瘫痪。
但是更容易测试的是在索引时禁用 refresh_interval 并在之后重新启用它。它通常会大大缩短摄取时间。
您可以在https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.html上查看有关此用例的完整文章
您创建物化视图。它最终是一个包含聚合函数数据的表。由于您已经插入了聚合数据,现在当您查询它时,它会更快。我觉得也没有必要缓存。即使我已经创建了 MV,它也极大地提高了性能。话虽如此,您甚至可以使用弹性搜索,如果您的数据不经常更改,您可以缓存聚合查询。我觉得 MV 和弹性搜索提供相同的性能。