elasticsearch需要数据库吗?

Cod*_*kie 5 hibernate jdbc relational-database hibernate-search elasticsearch

我一直在做有关弹性搜索的大量研究,我似乎对是否需要数据库的问题感到磕磕绊绊.

当前的Hibernate搜索和关系设计

我当前的应用程序是用java编写的,使用hibernate,hibernate-search和mysql数据库.Hibernate搜索基于lucene构建,并在数据库事务期间为我自动管理索引.Hibernate-search还将搜索索引,然后根据存储的pks从数据库中提取完整记录,而不必将整个数据模型存储在索引中.这非常有效,但随着我的应用程序的增长,我不断遇到扩展问题和成本,因为Lucene索引需要存在于每个应用程序服务器上,然后您需要另一个库来同步索引.此设计的另一个问题是它需要在所有应用程序服务器上有更多内存,因为索引正在复制并与应用程序一起存储.

数据库或没有数据库

来自hibernate-search思想学派,我很困惑你是否想要将整个数据模型存储在elasticsearch中并取消传统数据库,或者假设你将搜索数据存储在索引中并再次像hibernate-search返回主键以从关系数据库中提取完整记录.

管理索引

  1. 如果您使用带有数据库的索引,是否应该在事务期间手动维护它们?我看到一个名为river的jdbc项目,但它看起来已被弃用,不推荐用于生产用途,是否有一个库可以自动处理您的交易?
  2. 如果索引与数据库不同步,是否有建议的方法来重建它们?

Hibernate-Search API

我还在hibernate-search路线图API/SPI中看到了以下备用后端http://hibernate.org/search/roadmap/

Define API / SPI abstraction to allow for future external backends integrations such as Apache Solr and Elastic Search.
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人对此有任何意见?hibernate-search能否为您自动管理弹性搜索索引,就像它的本机配置一样?

如果没有数据库

不使用数据库进行任何搜索相关的缺点是什么?

Iva*_*van 4

我之前遇到过类似的问题,在使用带有数据的mysql的elasticsearch设置上。解决方案是只存储需要在elasticsearch上搜索的数据,并引用关系数据库。如果elasticsearch上的数据足以满足请求,我只返回elasticsearch记录。如果不是,我会转到关系数据库并返回该记录。

由于关系数据库引入的滞后性(它是用于高需求 Web 服务的 API,elasticsearch 更快),我将其分为这两个过程。这引入了同步问题,但这对我的应用程序来说并不重要,我们定期从关系数据库中提取数据,并仅在 elasticsearch 上重新索引更改的数据集。Elasticsearch 只能重新索引记录的子集。

我们考虑过不使用数据库并将所有内容存储在搜索引擎中,但这取决于数据的重要性。如果您不能冒丢失任何部分数据的风险,请不要仅存储在 Elasticsearch 上。我们始终认为elasticsearch中的数据是易腐烂的,并且搜索索引可以从数据库中重建。