`
BradyZhu
  • 浏览: 247705 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多

通常,Lucene的初学者们对Lucene.net索引文件的并发访问、IndexReader和IndexWriter的线程安全性存在一定的误解。而准确地理解这些内容是十分重要的。此文简单的论述下这两个问题。

并发访问的规则

Lucene提供了一些修改索引的方法,例如索引新文档、更新文档和删除文档;在执行这些操作时,为了避免对索引文件造成损坏,需要遵循一些特定的规则。这类问题通常会在web应用程序中突显出来。因为web应用程序是同时为多个请求而服务的。Lucene的并发性规则虽然比较简单,但我们必须严格遵守:

1.任意数量的只读操作都可以同时执行。例如,多个线程或进程可以并行地对同一个索引进行搜索。

2. 在索引正在被修改时,我们也可以同时执行任意数量的只读操作。例如,当某个索引文件正在被优化,或正在对索引执行文档的添加、更新或删除操作时,用户仍然可以对这个索引进行搜索。

3.在某一时刻,只允许执行一个修改索引的操作。也就是说,在同一时间,一个索引文件只能被一个IndexWriter或IndexReader对象打开。

是否允许对某个Lucene索引进行并发性操作的举例:

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

线程的安全性

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

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

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

表中打叉的部分表示两个操作不能同时执行。

从这个表可以归纳为:

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

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

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

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

分享到:
评论

相关推荐

    Java并发编程实践 PDF 高清版

    2.1 什么是线程安全性 2.2 原子性 2.3 锁 2.4 用锁来保护状态 2.5 活跃度与性能 第3章 共享对象 3.1 可见性 3.2 发布和逸出 3.3 线程封闭 3.4 不可变性 3.5 安全发布 . 第4章 组合对象 4.1 设计线程安全的类 4.2 ...

    JAVA并发编程实践_中文版(1-16章全)_1/4

    2.1 什么是线程安全性 2.2 原子性 2.3 锁 2.4 用锁来保护状态 2.5 活跃度与性能 第3章 共享对象 3.1 可见性 3.2 发布和逸出 3.3 线程封闭 3.4 不可变性 3.5 安全发布 . 第4章 组合对象 4.1 设计线程安全的类 4.2 ...

    Java魔法解密:揭秘HashMap底层机制.pptx.pptx

    HashMap的存储结构 HashMap内部采用数组和链表的方式存储数据,每个元素都包含...HashMap通过synchronized关键字实现线程安全,确保多线程环境下的数据一致性和并发访问的安全性,避免潜在的竞争条件和数据不一致问题。

    asp.net多线程的TCP端口扫描程序的设计与实现(源代码+thesis).zip

    安全性保护:我们将使用ASP.NET提供的身份验证和授权功能,确保只有经过授权的用户可以访问敏感数据和功能。我们还将使用加密技术来保护用户的敏感信息,如密码和支付信息。 缓存管理:为了提高应用程序的性能,我们...

    SQL Server 2008数据库设计与实现

     11.2.3 安全性  11.2.4 性能  11.2.5 缺陷  11.2.6 观点  11.3 T-SQL与CLR(公共语言运行时)  11.3.1 选择T-SQL的准则  11.3.2 选择.NET的准则  11.3.3 CLR对象类型  11.4 最佳实践  11.5 ...

    mysql数据库my.cnf配置文件

    如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能 innodb-buffer-pool-size = 128M innodb_log_buffer_size = 4194304 # 此参数确定些日志文件...

    DM8采用全新的体系架构,在保证大型通用的基础上,针对可靠性、高性能、海量数据处理和安全性做了大量的研发和改进工作,极大提升了达

    DM8提供查询结果集缓存策略,在服务器端实现结果集缓存,可以在提升查询速度的同时,保证缓存结果的实时性和正确性。 DM8采用更加有效的异步检查点机制,相对原有检查点长时间占用缓冲区的策略相比,逻辑更加简单,...

    多线程编程指南PDF

    并发性和并行性.................................................................................................................................18 多线程结构一览...........................................

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    NET组件程序设计 第2版中文版.part3.rar )

    第8章:多线程和并发管理 线程和多线程 组件和线程 使用线程 同步线程 自动同步 手动同步 WorkerThread包装类 同步委托 使用.NET多线程服务 第9章:序列化和持久化 自动序列化 序列化格式器 序列化事件 序列化和流 ...

    CLR.via.C#.(中文第3版)(自制详细书签)

    6.6.2 合理使用类型的可见性和成员的可访问性 6.6.3 对类型进行版本控制时的虚方法的处理 第7章 常量和字段 7.1 常量 7.2 字段 第8章 方法 8.1 实例构造器和类(引用类型) 8.2 实例构造器和结构(值类型) 8.3 ...

    IIS6.0 IIS,互联网信息服务

    转到“目录安全性”窗口,单击“IP地址及域名限制”下的“编辑”按钮,点选中“授权访问”以能接受客户端从本机之外的地方对IIS进行管理;最后单击“确定”按钮。 3.则在任意计算机的浏览器中输入如...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    平台设计方案.doc

    为充分保证系统在安全性、跨平台性、易扩展性、易维护性等方面的要求,建议采 用先进的三层应用体系结构。这种结构已成为当今应用软件的首选体系结构。 如图所示: 平台性能设计原则 响应时间 当数据录入操作时无...

    Java虚拟机

    原子性、可见性和有序性在Java内存模型中的体现;先行发生原则的规则和使用;线程在Java语言中的实现原理;虚拟机实现高效并发所做的一系列锁优化措施。 前言 第一部分 走近Java 第1章 走近Java 1.1 概述 1.2 ...

    oracle数据库dba管理手册

    2.3.10 外部文件访问 45 第3章 数据库逻辑设计 47 3.1 最终产品 47 3.2 优化软结构 47 3.2.1 起点:SYSTEM表空间 47 3.2.2 分离应用程序数据段:DATA 48 3.2.3 分离应用程序索引段:INDEXES 48 3.2.4 分离工具段:...

    中安威士数据库防火墙系统(VS-FW).docx

    特性优势 技术优势 全自主技术体系:形成高技术壁垒 高速分析技术:特殊数据包分析和转发技术,实现高效的网络通信内容过滤多线程技术和缓存技术,支持高并发连接 基于BigTable和MapReduce的存储:单机环境高效、...

Global site tag (gtag.js) - Google Analytics