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返回主键以从关系数据库中提取完整记录.
管理索引
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能否为您自动管理弹性搜索索引,就像它的本机配置一样?
如果没有数据库
不使用数据库进行任何搜索相关的缺点是什么?
我之前遇到过类似的问题,在使用带有数据的mysql的elasticsearch设置上。解决方案是只存储需要在elasticsearch上搜索的数据,并引用关系数据库。如果elasticsearch上的数据足以满足请求,我只返回elasticsearch记录。如果不是,我会转到关系数据库并返回该记录。
由于关系数据库引入的滞后性(它是用于高需求 Web 服务的 API,elasticsearch 更快),我将其分为这两个过程。这引入了同步问题,但这对我的应用程序来说并不重要,我们定期从关系数据库中提取数据,并仅在 elasticsearch 上重新索引更改的数据集。Elasticsearch 只能重新索引记录的子集。
我们考虑过不使用数据库并将所有内容存储在搜索引擎中,但这取决于数据的重要性。如果您不能冒丢失任何部分数据的风险,请不要仅存储在 Elasticsearch 上。我们始终认为elasticsearch中的数据是易腐烂的,并且搜索索引可以从数据库中重建。
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |