【发布时间】:2015-06-24 12:43:35
【问题描述】:
我一直在做很多关于弹性搜索的研究,我似乎在是否需要数据库的问题上磕磕绊绊。
当前的 Hibernate-Search 和关系设计
我当前的应用程序是用 java 编写的,使用 hibernate、hibernate-search 和 mysql 数据库。 Hibernate 搜索建立在 lucene 之上,并在数据库事务期间自动为我管理我的索引。 Hibernate-search 还将搜索索引,然后根据存储的 pk 从数据库中提取完整记录,而不必将整个数据模型存储在索引中。这非常有效,但是随着我的应用程序的增长,我不断遇到扩展问题和成本,因为 Lucene 索引需要存在于每个应用程序服务器上,然后您需要另一个库来将索引同步在一起。这种设计的另一个问题是它需要所有应用程序服务器上的更多内存,因为索引是与应用程序一起复制和存储的。
有数据库或无数据库
来自休眠搜索学派,我很困惑您是否应该将整个数据模型存储在弹性搜索中并取消传统数据库,或者您是否应该将搜索数据存储在索引中再次像 hibernate-search 返回主键以从关系数据库中提取完整记录。
管理索引
- 如果您使用带有数据库的索引,您应该手动 在交易期间维护它们?我看到一个jdbc项目叫 河流,但它似乎已被弃用,不推荐用于 生产用途,是否有图书馆能够 自动为您处理交易?
- 如果您的索引与数据库不同步,是否有推荐的重建方法?
休眠搜索 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.
我想知道是否有人对此有任何意见? hibernate-search 是否能够像使用其原生配置一样为您自动管理弹性搜索索引?
如果没有数据库
不使用数据库进行任何与搜索相关的事情会有什么缺点?
【问题讨论】:
标签: hibernate jdbc elasticsearch relational-database hibernate-search