首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Lucene NRT Reader/ Writer优雅地终止进程?

如何使用Lucene NRT Reader/ Writer优雅地终止进程?
EN

Stack Overflow用户
提问于 2012-01-25 13:54:06
回答 1查看 327关注 0票数 1

我们在我们的应用程序中使用Lucene的近乎实时的搜索功能进行全文搜索。由于提交的成本很高,假设我们每添加10个文档就提交索引(我们预计每小时索引大约150到200个文档)。现在,如果我想要终止我的进程,我如何确保在我的进程被终止之前,内存中的所有文档都已提交到磁盘?这里有什么推荐的方法吗?或者我的文档量太少了,不需要操心,我应该在每一次添加时都提交吗?

我是否应该跟踪所有未提交的文档?如果进程在提交到磁盘之前被终止,我是否应该在进程启动时再次索引这些未提交的进程?

Lucene NRT在运行嵌入式Jetty的进程中使用。向jetty发送关闭命令(调用某个servlet)并等待所有文档提交,然后使用System.exit()终止是否是正确的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-25 22:10:01

您可以添加一个钩子来提交servlet的destroy方法中的所有缓冲文档,并确保在调用System.exit之前关闭了嵌入的servlet容器(可能是通过向shutdown hook添加一个JVM)。

但这仍然不是完美的。如果您的进程被终止,所有缓冲的数据都将丢失。另一种解决方案是使用软提交。软提交是廉价的提交(不执行fsync ),因此如果您的进程被终止,不会丢失任何数据(但如果服务器意外关闭,数据仍可能丢失)。

总结一下:

如果进程获取killed,

  • shutdown hook
    • best throughput
    • data可能会丢失

  • soft commit
    • 如果进程终止,则不会丢失任何数据如果服务器关闭unexpectedly

  • 数据可能会丢失

  • hard commit (默认)
    • at all
    • slow (需要执行硬提交)时无数据丢失

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8998454

复制
相关文章

相似问题

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