ElasticSearch 包括还是与数据库?

ElasticSearch 包括还是与数据库?

我试图了解 ElasticSearch 在持久性方面到底做了什么。

当我在 ElasticSearch 中索引文档时,我也会在此步骤中将它们保存在 ElasticSearch 中。虽然我使用 ElasticSearch 索引文档的原因是为了能够使用 API 和某些搜索算法来搜索它们。

然后,在我的应用程序的其余部分中,我还有一个关系数据库,用于存储与我的应用程序相关的大量内容。在关系数据库中,我还拥有在 ElasticSearch 中索引的相同文档。

因此,我将文档保存在 ElasticSearch 和关系数据库中。我学习了 ElasticSearch 以获得扩展的搜索能力,但现在我想知道将文档保存在 ElasticSearch 和关系数据库中的步骤是否有点多余。

从关系数据库中删除文档并使用 ElasticSearch 中的索引文档作为数据源是否明智?

答案1

也许吧。这是我们的朋友在DBA 堆栈交换可能还有更多要说的。有时,您会因为不同的搜索或报告需求,或具有不同特征的数据库引擎而创建冗余副本。

作为此设计的一部分,了解 Elasticsearch 的安全性,尤其是它是一个分布式系统。杰普森的报告特别有趣。网络分区在某些情况下可能会导致文档丢失:

我对 Elasticsearch 用户的建议没有改变:将数据存储在具有更好安全保障的数据库中,并不断将该数据库中的每个文档更新到 Elasticsearch 中。如果您的搜索引擎一天内丢失了一些文档,这没什么大不了的;它们将在下次运行时重新插入并出现在后续搜索中。不使用 Elasticsearch 作为记录系统也使您不必担心选举期间 ES 停机。

举个实际的例子,我知道一家拥有庞大的 MediaWiki 的企业,他们在 Elasticsearch 中构建了一个搜索引擎。Wiki 和其他来源都有自己的 DBMS,支持大量 CRUD 应用程序。然后数千万种各种文档被塞进搜索引擎,这样人们通常就能找到东西。

相关内容