我正在使用spring boot并且为了更容易设置(没有用户权限操作)我决定使用RAM提供程序而不是FS。任何人都可以证实我的想法。
try {
FullTextEntityManager fullTextEntityManager =
Search.getFullTextEntityManager(entityManager);
fullTextEntityManager.createIndexer().startAndWait();
} catch (InterruptedException e) {
System.out.println(
"An error occurred trying to build the search index: " +
e.toString());
}
是否有一些可以依赖的DBDirectory实现?在这种情况下,索引文件是加载到RAM还是索引的每次更新都单独写入DB?
答案 0 :(得分:2)
您的所有假设几乎都是正确的。
在两种情况下,内存索引会丢失:
只有在以下情况下才需要重新编制实体索引:
在写作时,没有基于数据库的目录。在过去,我尝试调整Compass JdbcDirectory
。不幸的是,我从来没有时间比工作的概念验证更进一步。
项目跟踪器自2011年起开放issues。似乎在不久的将来,Hibernate Search中的数据库驱动目录不会得到官方支持。
请记住,内存索引仅适用于small data:
警告:此类不适用于大型索引。 超过几百兆的所有东西都会浪费资源(GC 循环),因为它使用1024字节的内部缓冲区, 产生数百万字节[1024]数组。这个类是优化的 小内存驻留索引。它还具有错误的并发性 多线程环境。
答案 1 :(得分:2)
您可以使用Infinispan目录作为替代方法,将内容保留在内存中,但在持久存储上具有副本。
Infinispan项目同时提供了
Infinispan旨在积极地将数据缓存在内存中,但有几个选项可通过在其配置中启用CacheStore将此类数据卸载到永久存储。
在众多CacheStore实现中,您可能会对以下内容感兴趣:
还有更多选择,例如连接到云存储,流行的NoSQL数据库等.Infinispan还支持跨节点的实时复制,因此您在Hibernate Search中的索引存储选项几乎是无限的。