lucene源码-lock和directory
来源:互联网 发布:韩国电视直播软件 编辑:程序博客网 时间:2024/05/29 03:12
两种类型的锁:
write.lock 文件用于阻止进程试图并发地修改一个索引。更精确地说,IndexWriter对象在实例化时获得write.lock文件,直到IndexWriter 对象关闭之后才释放。当IndexReader对象在删除、恢复删除文档或设定域规范时,也需要获得这个文件。因此,write.lock会在对索引进行 写操作时长时间地锁定索引。
当对段进行读或合并操作时,就需要用到commit.lock文件。在IndexReader 对象读取段文件之前会获取commit.lock文件,在这个锁文件中对所有的索引段进行了命名,只有当IndexReader对象已经打开并读取完所有 的段后,Lucene才会释放这个锁文件。IndexWriter对象在创建新的段之前,也需要获得commit.lock文件,并一直对其进行维护,直 至该对象执行诸如段合并等操作,并将无用的索引文件移除完毕之后才释放。因此,commit.lock的创建可能比write.lock更为频繁,但 commit.lock决不能过长时间地锁定索引,因为在这个锁文件生存期内,索引文件都只能被打开或删除,并且只有一小部分的段文件被写入磁盘里
lockfactory的继承关系
directory继承关系
打开索引文件夹下所有索引的方式
Directory directory = null;File file = new File(indexPath);Path path = file.toPath();directory = FSDirectory.open(path);
上述的open方法
public static FSDirectory open(Path path) throws IOException { return open(path, FSLockFactory.getDefault()); }
上述的FSLockFactory.getDefault()方法返回的fslockfactory实例, (设计模式:单例, 简单工厂), 该工厂用于在需要时创建lock
上述的open方法
public static FSDirectory open(Path path, LockFactory lockFactory) throws IOException { if (Constants.JRE_IS_64BIT && MMapDirectory.UNMAP_SUPPORTED) { return new MMapDirectory(path, lockFactory); } else if (Constants.WINDOWS) { return new SimpleFSDirectory(path, lockFactory); } else { return new NIOFSDirectory(path, lockFactory); } }
上述nio文件系统的构造方法如下
protected FSDirectory(Path path, LockFactory lockFactory) throws IOException { super(lockFactory); Files.createDirectories(path); // create directory, if it doesn't exist directory = path.toRealPath(); }
对于不存在的路径会自行创建
阅读全文
0 0
- lucene源码-lock和directory
- lucene源码-lock和directory--2
- lucene源码-lock和directory--3
- lucene directory
- Lucene中的锁commit.lock 和 writer.lock
- Lucene中Directory
- lucene lock 机制
- lucene lock 机制
- [lucene] 创建索引 Directory inderWriter
- Lucene基础篇2 Directory
- Lock、ReentrantLock和AbstractQueuedSynchronizer的源码要点分析整理
- Lock、ReentrantLock和AbstractQueuedSynchronizer的源码要点分析整理
- Podfile.lock: No such file or directory
- Podfile.lock: No such file or directory
- Lock obtain timed out: Lock@的解决方法(lucene)
- Lock obtain timed out: Lock@的解决方法(lucene)
- Lock obtain timed out: Lock@的解决方法(lucene)
- lucene.net文件目录管理Directory类
- 不要等到双十一,几何画板带回家!
- 用caffe训练并测试自己收集的数据,踩了一堆坑
- Akka(31): Http:High-Level-Api,Route rejection handling
- php实现多进程、多线程
- webview引起的libwebviewchromium.so' is 32-bit instead of 64-bit的bug
- lucene源码-lock和directory
- TOMCAT服务器重启造成图片资源自动删除
- 在MVC中使用rdlc格式的报表
- Python3之Django Web框架模型篇(一)
- 评《程序员的***》系列
- Android各大手机品牌手机跳转到权限管理界面
- 成都数之联科技前端题
- Hadoop(十三)分析MapReduce程序
- LIRC命令使用问题