优化 ElasticSearch 与 Rails 的集成

Optimizing ElasticSearch Integration with Rails

提问人:JIGME 提问时间:11/9/2023 最后编辑:JIGME 更新时间:11/9/2023 访问量:45

问:

上下文:我目前正在增强我的 Rails 应用程序中的 ElasticSearch 集成,处理一个复杂的数据模型,包括:

Potgres 数据库 ORM的 大约 100k 数据 大约 50 个具有各种关联类型(多对多、属于、多态)的关联表。 ElasticSearch CRUD 的自定义 Gem 实现,因为官方 ElasticSearch Gem 中存在限制,不支持关联的模型 CUD 操作。

挑战:当前的实现对 CRUD 操作使用after_commit回调,但我面临着性能问题,尤其是在关联方面。例如:

更新子模型时,在全局搜索中反映更改之前,我遇到了明显的延迟(大约 3 小时)。

调查:我怀疑延迟与缓慢的PostgreSQL查询有关,尤其是在处理大量关联和大型数据集时。

问题:

优化策略:

如何优化 ElasticSearch 更新过程以使其更加即时,尤其是在处理大量关联和大型数据集时?

是否有特定的策略可以提高多对多关系和多态关联的性能?

数据库查询性能:

在更新关联的子模型时,可以对 PostgreSQL 查询应用哪些优化来加快父模型的检索? 替代方法:

在具有复杂关联的 Rails 应用程序中处理 ElasticSearch 更新是否有其他方法或最佳实践?

其他信息:由于官方 ElasticSearch Gem 的限制,使用自定义 Gem。

主要瓶颈似乎是反映全局搜索变化的延迟,尤其是在更新子模型时。

Ruby-on-Rails Ruby PostgreSQL Elasticsearch ActiveRecord

评论

1赞 zaphodbln_ 11/9/2023
对于 PostgreSQL 部分:创建所需的索引。这和你的问题一样抽象,但却是唯一的性能技巧,在这个领域有所帮助。看看 postgresql.org/docs/current/performance-tips.html 如何使用 ANALYZE 来查找推荐的索引。但是 100k 的数据和 50 个表对数据库来说不算什么——所以可能有更好的杠杆可以拉动。
0赞 spickermann 11/9/2023
您的数据库架构是什么样的?您的代码(尤其是回调)是什么样子的?您使用的是哪些宝石以及这些宝石的哪个版本?

答: 暂无答案