首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate搜索:应用程序之间的共享索引

Hibernate搜索:应用程序之间的共享索引
EN

Stack Overflow用户
提问于 2017-01-30 16:21:05
回答 2查看 841关注 0票数 2

我们正在开发一个使用Hibernate/JPA访问数据库的JavaFX解决方案。我们在Lucene中使用Hibernate搜索实体,只要程序的一个实例正在运行,实体就会运行得很好。如果启动了第二个实例,搜索仍然有效,但是更新实体失败,因为第一个已启动的应用程序保持索引上的写锁。我们不使用任何类型的JavaEE应用服务器,JavaFX客户端通过Hibernate直接访问数据库。

在最终的生产环境中,将有一个MS服务器保存所有数据和几个在虚拟机中运行的丰富客户端,或者通过VPN到达数据库服务器。我希望所有客户端都可以添加和编辑实体,并立即获取索引更新。我已经试着用Infinispan找到一个解决方案,但是我并没有真正理解从哪里开始和应该做什么。

有人能告诉我如何做到这一点吗?是否可以直接将索引保存在数据库中,或者启动某种服务,以便客户端可以访问当前索引?

EN

Stack Overflow用户

回答已采纳

发布于 2017-01-31 18:01:35

有多种选择。

  1. 正如纪尧姆·斯米特( Guillaume )建议的那样,将指数外部化为Elasticsearch集群。这可能会扩大规模,但对于小型部署来说,这可能会造成过度的损失。
  2. 设置配置属性hibernate.search.default.exclusive_index_use=false并将应用程序指向同一个目录;它们将能够共享它,但它们必须“轮流”执行写操作。另见表3.7.索引性能和行为属性列表
  3. 将索引存储在Infinispan (内存分布式数据网格中)中。分发方面可能有些过分,但它能够将存储卸载到关系数据库。见Infinispan目录JDBC缓存存储

因为您提到了在VPN上运行的客户端,所以我不建议在集群模式下运行Infinispan,因为它是用于高性能(本地)链接的,但是您仍然可以在“本地模式”中使用它,让每个客户机通过JDBC缓存存储读取更新的索引。但是,只有在写入频率不高的情况下,此解决方案才能有效,因为每个客户端都需要在每次索引更新上下载大量数据。第二种解决方案将要求每个客户端挂载一个共享文件系统,这同样需要下载和缓存。

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41940682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档