Lucene 索引的并发读写

简介: lucene能够很好地支持多线程/进程 访问。 1.并发读 一个索引可以被多个进程的IndexReader打开。一个进程中,推荐IndexReader被单例多线程使用。 IndexReader类不仅是线程安全的,还是线程友好的,即友好地支持并发访问,代码中同步代码(synchronized)块并不多。 2.单独写 对于一个索引来说,一次只能打开一个IndexWriter。 2
lucene能够很好地支持多线程/进程 访问。

1.并发读

一个索引可以被多个进程的IndexReader打开。一个进程中,推荐IndexReader被单例多线程使用。

IndexReader类不仅是线程安全的,还是线程友好的,即友好地支持并发访问,代码中同步代码(synchronized)块并不多。

2.单独写

对于一个索引来说,一次只能打开一个IndexWriter。

2.1 索引锁机制

Lucene采用了基于文件的锁。如果锁文件 write.lock存在于目录内,那么创建新的IndexWriter就会失败,抛出LockObtainFailedException异常。
lucene允许我们修改锁的实现,通过调用Directory,setLockFactory()传入自定义的子类。

3.边读边写

IndexReader可以在IndexWriter正在修改索引时被打开。每个IndexReader对象将向索引展示自己 被打开的时间点。该对象只有在Writer提交修改后才感知到索引变化。
打开IndexReader'时采用参数create=true,reader就会持续检查索引的情况。
相关文章
|
9月前
|
聊聊性能,如何合理设置索引?
【6月更文挑战第1天】本文介绍了数据库索引过多的索引会使更新表的速度变慢,增大数据库体积和维护成本。索引过多的风险包括降低增删改操作性能、增大数据库体积、增加存储压力和维护开销,以及加大SQL Server优化开销。建议的核心表索引不超过7个,普通表不超过5个,小型表不超过3个。针对索引过多的问题,文章提出需要根据实际需求进行分析并提供解决方案。
405 4
聊聊性能,如何合理设置索引?
深入理解数据库索引:提升查询性能的关键
数据库索引是优化查询性能的重要工具。本文将带你深入探索索引的内部结构和工作原理,揭示如何通过合理使用索引来加速数据库查询,同时避免常见的索引陷阱。
顺序读和InnoDB的数据组织
【7月更文挑战第7天】自增主键优化顺序读:保证数据物理排序,提升范围查询效率。InnoDB引擎中,主键决定数据在页的存储。当插入的数据引起页分裂,如从1、2、3、5、6、7插入4,会导致相邻逻辑页在磁盘上可能分散,影响性能。了解页结构深化数据库知识,面试时可根据情况深入讨论。
45 2
|
10月前
|
顺序读写数据文件
顺序读写数据文件
67 1
物理读之LRU(最近最少被使用)的深入解析
LRU算法,不但在操作系统中有,在数据库中也有,下面我以Oracle数据库的LRU算法为例给大家分享,解析它背后的原理。
物理读之LRU(最近最少被使用)的深入解析
LSM实现热数据读写和range查询加速
LSM-tree 上的读路径,从出生就带着镣铐。因为 CoW 的使用,读一条记录实际上需要把这条记录所有的增量碎片都找到。因为横跨内存和磁盘两种介质和有层次化的存储,这些碎片可能藏在各种犄角旮旯里面。更惨的是,如果是读一个范围内的记录,俗称 range scan,因为 LSM-tree 的每一层的 key range 是交叠的,那么一个 range 内的数据就很有可能会落在所有的层次上,为了把他们都找到,我们就需要每层都去读,这个工作量也不小。
338 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等