如何优雅地终止Lucene NRT读写器的进程?
我们在应用程序中使用Lucene的近实时搜索功能进行全文搜索。由于提交成本很高,假设我们在每添加10个文档后就提交索引(我们预计每小时索引大约150到200个文档)。现在,如果我想终止进程,如何确保在进程终止之前将内存中的所有文档提交到磁盘?这里有推荐的方法吗?还是我的文档量太少而无暇顾及,我应该在每次添加时都提交 我应该跟踪所有未提交的文档吗?如果进程在提交到磁盘之前被终止,我应该在进程启动时再次索引这些未提交的进程吗如何优雅地终止Lucene NRT读写器的进程?,lucene,lucene-nrt,Lucene,Lucene Nrt,我们在应用程序中使用Lucene的近实时搜索功能进行全文搜索。由于提交成本很高,假设我们在每添加10个文档后就提交索引(我们预计每小时索引大约150到200个文档)。现在,如果我想终止进程,如何确保在进程终止之前将内存中的所有文档提交到磁盘?这里有推荐的方法吗?还是我的文档量太少而无暇顾及,我应该在每次添加时都提交 我应该跟踪所有未提交的文档吗?如果进程在提交到磁盘之前被终止,我应该在进程启动时再次索引这些未提交的进程吗 Lucene NRT用于运行嵌入式Jetty的流程。向jetty发送关闭命
Lucene NRT用于运行嵌入式Jetty的流程。向jetty发送关闭命令(调用某个servlet)并等待所有文档提交,然后使用System.exit()终止,这是正确的方法吗?您可以添加一个钩子来提交servlet方法中的所有缓冲文档,并确保在调用System.exit之前关闭嵌入式servlet容器(可能通过向JVM添加一个) 但这仍然不是完美的。如果进程被终止,所有缓冲数据都将丢失。另一种解决方案是使用软提交。软提交是廉价的提交(不执行fsync),因此如果进程被终止,数据不会丢失(但如果服务器意外关闭,数据仍可能丢失) 总而言之:
- 停堆钩
- 最佳吞吐量
- 如果进程被终止,数据可能会丢失
- 软提交
- 如果进程被终止,则不会丢失任何数据
- 如果服务器意外关闭,数据可能会丢失
- 硬提交(默认)
- 完全没有数据丢失
- 慢速(需要执行fsync)