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

Hibernate搜索:应用程序之间的共享索引,hibernate,jpa,lucene,hibernate-search,infinispan,Hibernate,Jpa,Lucene,Hibernate Search,Infinispan,我们正在开发一个使用Hibernate/JPA访问数据库的JavaFX解决方案。我们使用HibernateSearch和Lucene来搜索实体,只要程序只有一个实例在运行,它就可以很好地工作。如果启动了第二个实例,则搜索仍然有效,但更新实体失败,因为第一个启动的应用程序保留索引上的写锁。我们没有使用任何类型的JavaEE应用服务器,JavaFX客户端通过Hibernate直接访问数据库 在最终的生产环境中,将有一台MS-SQL服务器保存所有数据,并有几个富客户机在服务器上虚拟机运行,或通过VPN

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

在最终的生产环境中,将有一台MS-SQL服务器保存所有数据,并有几个富客户机在服务器上虚拟机运行,或通过VPN到达数据库服务器。我想使所有的客户端都可以添加和编辑实体,并立即获得索引更新。我已经试着用英菲尼斯潘找到一个解决方案,但并没有真正掌握从哪里开始,具体做什么


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

我认为这可能是您测试我们新的Elasticsearch集成的一个很好的用例

我们今天发布了5.6.0.Final,支持Elasticsearch。有关详细信息,请参阅

请注意,如果您使用ORM5.2.x,您将需要使用我们的5.7.0.CR1,它与5.6.0.Final基本相同,并支持ORM5.2.x


这种支持仍然是实验性的,这意味着我们可能会在下一个版本中更改一些API,但我认为对于您的用例来说,它绝对值得一试。

我认为它可能是您测试我们新的Elasticsearch集成的一个很好的用例

我们今天发布了5.6.0.Final,支持Elasticsearch。有关详细信息,请参阅

请注意,如果您使用ORM5.2.x,您将需要使用我们的5.7.0.CR1,它与5.6.0.Final基本相同,并支持ORM5.2.x


这种支持仍然是实验性的,这意味着我们可能会在下一个版本中更改一些API,但我认为对于您的用例来说,这绝对值得一试。

有多种选择

正如Guillaume Smet所建议的,将索引外部化到Elasticsearch集群。这可以扩大规模,但对于小型部署来说可能有些过头了。 设置配置属性hibernate.search.default.exclusive_index_use=false并将应用指向同一目录;他们将能够共享它,但他们必须轮流进行写操作。另见。 将索引存储在内存分布式数据网格中的Infinispan目录中。分发方面可能有些过分,但它能够将存储卸载到关系数据库。看到和 由于您提到了通过VPN运行的客户端,我不建议在群集模式下运行Infinispan,因为它用于高性能本地链接,但您仍然可以在本地模式下使用它,让每个客户端通过JDBC缓存存储读取更新的索引。然而,这种解决方案只有在写操作不是非常频繁的情况下才有效,因为每个客户机在每次索引更新时都需要下载大量数据。
第二种解决方案要求每个客户端安装一个共享文件系统,这同样需要下载和缓存。

有多种选择

正如Guillaume Smet所建议的,将索引外部化到Elasticsearch集群。这可以扩大规模,但对于小型部署来说可能有些过头了。 设置配置属性hibernate.search.default.exclusive_index_use=false并将应用指向同一目录;他们将能够共享它,但他们必须轮流进行写操作。另见。 将索引存储在内存分布式数据网格中的Infinispan目录中。分发方面可能有些过分,但它能够将存储卸载到关系数据库。看到和 由于您提到了通过VPN运行的客户端,我不建议在群集模式下运行Infinispan,因为它用于高性能本地链接,但您仍然可以在本地模式下使用它,让每个客户端通过JDBC缓存存储读取更新的索引。然而,这种解决方案只有在写操作不是非常频繁的情况下才有效,因为每个客户机在每次索引更新时都需要下载大量数据。 第二种解决方案要求每个客户机安装一个共享文件系统,这同样需要下载和缓存