elasticsearch,relational-database,hibernate-search,Hibernate,Jdbc,elasticsearch,Relational Database,Hibernate Search" /> elasticsearch,relational-database,hibernate-search,Hibernate,Jdbc,elasticsearch,Relational Database,Hibernate Search" />

Hibernate elasticsearch需要数据库吗?

Hibernate elasticsearch需要数据库吗?,hibernate,jdbc,elasticsearch,relational-database,hibernate-search,Hibernate,Jdbc,elasticsearch,Relational Database,Hibernate Search,我已经做了很多关于elasticsearch的研究,我似乎在是否需要一个数据库的问题上结结巴巴 当前Hibernate搜索和关系设计 我当前的应用程序是使用hibernate、hibernate搜索和mysql数据库用java编写的。Hibernate search构建在lucene上,在数据库事务期间自动为我管理索引。Hibernate search还将搜索索引,然后根据存储的pks从数据库中提取完整记录,而不必将整个数据模型存储在索引中。这非常有效,但是随着我的应用程序的增长,我不断遇到扩展

我已经做了很多关于elasticsearch的研究,我似乎在是否需要一个数据库的问题上结结巴巴

当前Hibernate搜索和关系设计

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

数据库或无数据库

来自hibernate搜索思想学派,我不清楚您是否打算将整个数据模型存储在elasticsearch中,并废除传统的数据库,或者您是否打算将搜索数据存储在索引中,并再次像hibernate search一样返回主键以从关系数据库中提取完整记录

管理索引

  • 如果您将索引与db一起使用,是否应该手动 在交易期间维护它们?我看到一个名为 河流,但它似乎已被弃用,不建议用于 生产使用,是否有一个图书馆能够 自动为您处理交易
  • 如果索引与数据库不同步,是否有建议的方法重建它们
  • 休眠搜索API

    在hibernate搜索路线图中,我还看到了以下内容 用于替代后端的API/SPI

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

    如果没有数据库


    不使用数据库进行任何与搜索相关的操作会有什么缺点?

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

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

    我们考虑过不使用数据库并在搜索引擎中存储所有内容,但这取决于数据的重要性。如果你不能冒险丢失数据的任何部分,不要只存储在elasticsearch上。我们一直认为elasticsearch中的数据是易逝的,因此可以从数据库中重建搜索索引

    来自hibernate搜索思想流派,我对此感到困惑 您是否假设将整个数据模型存储在 elasticsearch并废除传统数据库,或者 假设将您的搜索数据存储在索引中,然后像 hibernate搜索返回主键以从中提取完整记录 您的关系数据库

    您可以存储所有内容,但如果只存储需要搜索的字段,您将获得更好的可伸缩性。记录越小,索引就越小,在给定的内存量中能够容纳的内存就越多

    如果您将索引与db一起使用,是否应该手动 在交易期间维护它们?我看到一个名为 河流,但它似乎已被弃用,不建议用于 在生产使用中,是否有一个库能够自动 为您处理交易

    我正在为此使用Spring事务同步。基本上在事务成功提交后触发异步重新索引

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


    ES不是数据库,不支持跨文档的事务性操作。

    请注意,Hibernate Search/Elasticsearch集成现已基本就绪,并且进展迅速:


    谢谢您的回复。有几个问题,您是否在数据库保存更新和删除期间对索引进行实时更新?我还假设您是通过使用Jackson将bean序列化为JSon来管理索引的?最后,如果您没有对索引进行实时更新,您只是在运行某种cron作业来管理索引更新吗?它只是一个后端作业,用于获取要索引的差异。我们用芹菜和巨蟒(Python)来做这件事。我们也使用Python进行了序列化,使用SQLAlchemy获取数据,并使用我们自己的json序列化程序发送到elasticsearch。
    Define API / SPI abstraction to allow for future external backends integrations such as Apache Solr and Elastic Search.