我正在考虑维护Elasticsearch索引的策略,我发现plugin可以很好地处理维护但是我希望与Elasticsearch更加亲密,因为我非常喜欢她,如果你知道我的意思,插件会让游戏时间变得不那么亲密。
所以无论如何,如果我的数据集有相当频繁的更新(比如~1 update / 10s),我会遇到Elasticsearch的性能问题吗?当单个行更改或必须完全重新构建索引时,是否可以完成部分索引更新?我计划实现的策略包括每当我使用我的应用程序(python postgre)进行CRUD时修改索引,因此我不会过分关注代码,只有性能会有一些开销。我的策略是否常见?
我已经使用了Sphinx,它有一个部分重新索引,它与一个cron作业一起运行以保持同步,它在索引和配置中定义的MySQL表之间进行了映射。这是Sphinx的推荐方法。是否有推荐的Elasticsearch方法?
答案 0 :(得分:13)
有许多不同的策略来处理这个问题,没有简单的一种尺寸适合所有解决方案。
要回答一些问题,首先,Elasticsearch / Lucene中没有部分更新。如果更新文档中的单个字段,则会重写整个文档。在设计架构时,请注意这对性能的影响。但是,如果您更新单个文档,则应立即提供。 Elasticsearch是一个近乎实时的搜索引擎,您不必担心不断重新生成索引。
对于您的写入加载一次更新/ 10s,默认性能设置应该没问题。事实上,ES的写入负载非常低,它可以扩展得更高。例如,Netflix在其中一个集群中执行700万次更新/分钟。
就同步策略而言,我已经写了一篇关于此"Keeping Elasticsearch in Sync"的深度文章