Lucene笔记05

Lucene是允许对索引的并发操作的,具体操作时,要遵循三条简单而严格的规则:

  • 任意数量只读操作可以并行。
  • 对于一个处于写状态的索引来说,也允许任意只读操作并行。
  • 索引的写操作不可以并行,只能有一个实例线程修改索引。

Lucene的并发规则非常简单,而且,这样的规则基本符合我们的直觉思维,因而非常容易记忆。事实上,Lucene并不强制遵守这些规则,但是违背规则,将带来不可预测的风险,例如索引损坏。

实际操作中,一个好的做法是对于执行写操作的对象,使其单一实例化,也就是使用Singleton设计模式。Lucene的索引操作对象,都被设计为线程安全的形式,多个线程可以直接调用,而不需要额外的同步操作。这一点相当体贴。

实际上,可能没有人会故意去不遵守Lucene的并发规则,造成这样的状况,往往是意外,所以,Lucene提供了一套锁,来保护索引。

Lucene的锁以文件的形式保存在磁盘上,一共有两种锁,一种是write.lock,另一种是commit.lock。