导航

lucene 文件存储相关的几个类

Posted on 2010-05-14 10:48  蝈蝈俊  阅读(597)  评论(0编辑  收藏  举报

lucene 文件存储相关的几个类,以及他们的派生关系如下图:

image

  • Directory  代表了 Lucene 的索引的存储的位置,这是一个抽象类。
  • DbDirectory 存储到 Berkeley DB 4.3  的实现,Berkeley DB是历史悠久的嵌入式数据库系统,主要应用在UNIX/LINUX操作系统上,其设计思想是简单、小巧、可靠、高性能。
  • JEDirectory 存储到 Berkeley DB Java Edition (JE) 的实现, Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。
  • FileSwitchDirectory,多个目录存储索引,注意:这个API先不要用,因为API文档注明过有可能在将来的版本进行修改。
  • 如果数据量不大,可以直接使用RAMDirectory,毕竟在内存中,数据的访问会更快。RAMDirectory还有一个地方比较常用,那就是单元测试,可以在初始化测试方法时创建索引,测试完成后删除索引,这样就不会留下不必要的垃圾文件。 RAMDirectory 转 FSDirectory 可以参看这篇文章:http://vincent-feng.javaeye.com/blog/205832
  • FSDirectory,它表示一个存储在文件系统中的索引的位置;这也是一个抽象类。
  • SimpleFSDirectory 这个类是对FSDirectory的一个简单实现,一般的系统都是使用这个Directory对象进行操作的。
  • NIOFSDirectory 与FSDirectory一样,将文件存放在文件系统中,不同的地方是它利用的java.nio.*来读取文件,当多线程来读取同一文件时,不用像FSDirecotyr使用锁机制。
  • MMapDirectory 与FSDirectory一样,将文件存放在文件系统中,不同的地方是它不是利用io来操作文件,而是利用内存映射。

lucene 的 CHANGES.txt 文件中有如下说明:

21. LUCENE-753: Added new Directory implementation  org.apache.lucene.store.NIOFSDirectory, which uses java.nio's  FileChannel to do file reads.  On most non-Windows platforms, with  many threads sharing a single searcher, this may yield sizable improvement to query throughput when compared to FSDirectory,  which only allows a single thread to read from an open file at a time.  (Jason Rutherglen via Mike McCandless)

注意:官方不推荐在 windows 开台下用 NIOFSDirectory ,因为 windows 下 java 的 NIO 有个 bug:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6265734

 

Lucene的并发性规则:

操作 是否允许
对同一个索引运行多个并行的搜索进程 允许
对一个正在生成、被优化或正在与另一索引合并的索引运行多个并行的搜索进程,或该索引正在进行删除、更新文档等操作时,对索引运行多个并行的搜索进程 允许
对同一个索引用多个IndexWriter对象执行添加、更新文档的操作 不允许
当一个从索引中删除文档的IndexReader对象没有成功关闭时,打开一个IndexWriter对象用于在这个索引中添加新的文档 不允许
IndexWriter对象向索引中添加新文档后,未成功关闭;在此之后,打开一个IndexReader对象用于从这个索引中删除文档 不允许

 

 

参考资料:

如何提高Lucene的搜索速度
http://www.cnblogs.com/live41/archive/2009/12/31/1636900.html
http://hi.baidu.com/expertsearch/blog/item/2195a237bfe83d360a55a9fd.html

lucene学习(4)
http://liliang1222.javaeye.com/blog/513734

lucene/solr FSDirectory NIOFSDirectory 性能测试对比与Http11NioProtocol
http://blog.chenlb.com/2009/05/lucene-solr-fsdirectory-niofsdirectory-performance-and-http11nioprotocol.html

Java Lucene (3):锁机制
http://dev.firnow.com/course/3_program/java/javajs/2008224/100826.html

Lucene--Directory解析
http://hi.baidu.com/dangjun625/blog/item/9cd9012ea9473e5a4fc226f6.html