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就会持续检查索引的情况。
目录
相关文章
|
1月前
|
分布式计算 测试技术 Apache
如何不加锁地将数据并发写入Apache Hudi?
如何不加锁地将数据并发写入Apache Hudi?
32 0
|
4天前
|
SQL 关系型数据库 MySQL
MySQL 并发更新冗余索引字段导致的死锁
一 前言死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。二 案例分析2.1 业务场景业务开发同学要做业务逻辑迁移,由A表迁移到B表,B表承担所有的类型的业务,他们的业务逻辑是:...
17 0
MySQL 并发更新冗余索引字段导致的死锁
|
存储 机器学习/深度学习 缓存
|
存储 SQL 关系型数据库
并行查询的特性
并行查询可以说是PolarDB MySQL在计算层最为重要复杂度也最高的功能组件,随着PolarDB的推出已经线上稳定运行多年,而且一直在持续演进,它具备如下几个特性
97 0
|
存储 自然语言处理 数据库
Lucene 查询原理
# 前言 Lucene 是一个基于 Java 的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。想要理解搜索系统的实现原理,就需要深入lucene这一层,看看lucene是如何存储需要检索的数据,以及如何完成高效的数据检索。
8407 1