并发、多线程下Lucene需要注意的地方

Lucene的并发处理规则非常简单。下面我们来看看:

  • 任意数量的只读属性的IndexReader类都可以同时打开一个索引。无论这些Reader是否同时属于一个JVM,以及是否属于同一台计算机都无关紧要。但需要记住:在单个JVM内,利用资源和发挥效率的最好办法是用多线程共享单个IndexReader实例。例如,多个线程或进程并行搜索同一个索引。

  • 对于一个索引来说,一次只能打开一个Writer。Lucene采用文件锁来提供保障。一旦建立IndexWriter对象,系统机会分配一个锁给它。该锁只有当IndexWriter对象被关闭时才会释放。注意如果你使用IndexReader对象来改变索引的话——比如修改norms或者删除文档。这时IndexReader对象会作为Writer使用:它必须在修改上述内容之前成功地获取Writer锁,并在被关闭时释放该锁。

  • IndexReader对象甚至可以在IndexWriter对象正在修改索引时打开。每个IndexReader对象将向索引展示自己被打开的时间点。该对象只有在IndexWriter对象提交修改或自己被重新打开后才能获知索引的修改情况。所以一个更好的选择时,在已经有IndexReader对象被打开的情况下,打开新的IndexReader时采用参数create=true:这样,新的IndexReader会持续检查索引的情况。

  • 任意多个线程都可以共享一个IndexReader类或IndexWriter类。这些类不仅是线程安全的,而且是线程友好的,也就是说它们能够很好地扩展到新增线程。

正如所述,Lucene能很好地支持多线程或多虚拟机访问。开发者可以简易地使用Lucene


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值