首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Lucene.net目录文件的并发访问和线程安全性(转)

2012-09-04 
Lucene.net索引文件的并发访问和线程安全性(转)Lucene.net索引文件的并发访问和线程安全性操????作是否允

Lucene.net索引文件的并发访问和线程安全性(转)

Lucene.net索引文件的并发访问和线程安全性

操????作

是否允许

对同一个索引运行多个并行的搜索进程

允许

对一个正在生成、被优化或正在与另一索引合并的索引运行多个并行的搜索进程,或该索引正在进行删除、更新文档等操作时,对索引运行多个并行的搜索进程

允许

对同一个索引用多个IndexWriter对象执行添加、更新文档的操作

不允许

当一个从索引中删除文档的IndexReader对象没有成功关闭时,打开一个IndexWriter对象用于在这个索引中添加新的文档

不允许

IndexWriter对象向索引中添加新文档后,未成功关闭;在此之后,打开一个IndexReader对象用于从这个索引中删除文档

不允许

注意当正在修改一个索引时,在同一个索引上只能执行一个修改操作。

线程的安全性
我们可能遇到这样的情况:一个IndexWriter或IndexReader对象可以被多个线程所共享

应用程序不需要进行额外的同步处理。尽管IndexReader和IndexWriter这两个类都是线程安全的,使用Lucene的应用程序还是必须确保这两个类的对象对索引的修改操作不能重叠。也就是说,在使用IndexWriter对象将新文档被添加至索引中之前,必须关闭所有已经完成在同一个索引上,进行删除操作的IndexReader实例。同样地,在IndexReader对象对索引中的文档进行删除和更新之前,必须关闭此前已经打开该索引的IndexWriter实例。

这里假设使用同一个IndexWriter或IndexReader实例时的并发操作:

表中打叉的部分表示两个操作不能同时执行。
从这个表可以归纳为:

?

1.IndexReader对象在从索引中删除一个文档时,IndexWriter对象不能向其中添加文档。

2.IndexWriter对象在对索引进行优化时,IndexReader对象不能从其中删除文档。

3.IndexWriter对象在对索引进行合并时,IndexReader对象也不能从其中删除文档。

我们可以得到这样一个使用模式:当IndexWriter对象在对索引进行修改操作时,IndexReader对象不能对索引进行修改。这个操作模式是对称的:当IndexReader对象正在对索引进行修改操作时,IndexWriter对象同样也不能对索引进行修改。

?

热点排行