为什么Lucene会锁定整个目录?为什么不直接锁定单个lucene文件?

时间:2014-01-14 11:09:53

标签: java lucene directory locking

我正在编写一个自定义的lucenene Directory实现,并想知道为什么IndexWriter会锁定整个Directory实例而不是按文件锁定文件。

我对Lucene的内部结构还不太熟悉,但到目前为止我读到的内容,我正在考虑将锁定限制为每个'luce索引文件类型'的每个实例,以支持多个索引器的并发索引< / p>

我确信如果这么简单,许多其他人现在就会做到这一点;所以想知道为什么不这样做,以及整个目录被锁定的原因......

有人可以解释为什么这样做的原因,以及为什么不做我建议的原因?

谢谢, 桑巴

1 个答案:

答案 0 :(得分:1)

我认为您对Lucene file format的理解过于简单。

Lucene不仅像你建议的那样每个术语使用一个单独的文件,而且还存储了许多其他重要信息 - 术语向量,频率,指针等。此外,它必须存储已删除的文件并执行合并(这在幕后发生!) - 我可以向您保证整体复杂性非常高。最重要的是,Lucene提供transactional support and implements all ACID properties。具有多个并发写入器的这些都不容易(甚至可能)。换句话说,Lucene面向CA in CAP

好消息是,从版本4开始,您可以plug your own format,所以请随意尝试并提出更好的选择。