0

我在 SAN(共享区域网络)上有一个 Lucene 索引,它被多个 lucene 实例使用,分布在多台机器上。更新索引的时候,lucene的一个实例,会说add or update document,它会使i nativeFSLock,这使得其他人无法同时写,这个很好用!

问题是,我希望能够向任何 lucene 实例发送包含更新的批处理,并且我希望它完成所有更新然后释放锁。在 Lucene.net 中没有 addDocuments 方法,只有 AddDocument。所以我必须遍历我的所有文档并一次添加一个。一旦添加了一个文档,lucene 就会释放锁,然后为下一个文件创建一个新锁。因此,如果其他人尝试同时更新或添加文档,它有时会在那个小时间跨度内成功获得锁,而当这种情况发生时,只有我的一部分批次会通过(竞争条件)。

我想获得一个锁,直到我的整个批次完成后才释放它,有什么建议吗?

此致

4

1 回答 1

0

不要对存储在 SAN 上的索引使用 NativeFSLockFactory,或使用专用节点写入索引。

尝试使用 SimpleFSLockFactory 并查看它是否可以解决您的锁定问题。但是使用 SimpleFSLockFactory 可能会出现另一个问题,如果您的进程在持有锁时崩溃,它会留下锁。

更多细节在这里: http: //lucene.apache.org/core/old_versioned_docs/versions/2_9_4/api/all/org/apache/lucene/store/NativeFSLockFactory.html

我建议您使用上面链接中指定的锁定测试工具测试您的环境。(VerifyingLockFactory、LockVerifyServer 和 LockStressTest)

于 2012-07-09T17:14:17.660 回答