原文出处:http://blog.chenlb.com/2009/05/lucene-solr-fsdirectory-niofsdirectory-performance-and-http11nioprotocol.html
lucene 2.4 开始有一个 NIOFSDirectory 实现,使用 java.nio's FileChannel 读取文件。官方说:在大多数非 windows 平台下,多个线程共用单个 searcher 比 FSDirectory(在同一时刻只能一个线程使用 searcher)可以提高查询的吞吐量。
lucene 2.4 的 CHANGE.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)
下面来测试下 NIOFSDirectory 能带来多少的提高,在solr 1.3里测试。在基本相同情况下,分别对 FSDirectory 、NIOFSDirectory 、NIOFSDirectory + Http11NioProtocol(tomcat)进行测试。用 jmeter 开100个线程的测试结果:
FSDirectory 的
FSDirectory,点击放大
NIOFSDirectory 的
NIOFSDirectory ,点击放大
NIOFSDirectory + Http11NioProtocol(tomcat)
NIOFSDirectory + Http11NioProtocol(tomcat),点击放大
吞吐量一一提高,关于 jmeter 测试报告的说明请看:http://blog.chenlb.com/2009/03/jmeter-report-explain.html
单纯从数字上看,NIOFSDirectory 比 FSDirectory 提高了 (80.7-67.2)/67.2=20%,并且平均的响应时间也有提高,提高了:1313-1086=227ms。效果还是不错的。使用 Http11NioProtocol(tomcat)可以进一步地提高吞吐量。
延伸:
1、在 lucene/solr 中使用 NIOFSDirectory ,因程序或 solr 编写代码时是用 FSDirectory ,很难对修改代码来指定使用 NIOFSDirectory ,幸好 lucene 作者们已经考虑到这个问题,可以用系统属性(System property) org.apache.lucene.FSDirectory.class 指定使用那个 FSDirectory,如tomcat的启动脚本 bin/startup.sh 最上面加:
JAVA_OPTS="$JAVA_OPTS -Dorg.apache.lucene.FSDirectory.class=org.apache.lucene.store.NIOFSDirectory"
export JAVA_OPTS
2、tomcat 使用 Http11NioProtocol。在conf/server.xml里修改,如下:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="100" connectionTimeout="10000" redirectPort="8443"
enableLookups="false" minSpareThreads="16" maxSpareThreads="64" acceptCount="0" debug="0"
useURIValidationHack="false" URIEncoding="UTF-8"/>
注意:官方不推荐在 windows 开台下用 NIOFSDirectory ,因为 windows 下 java 的 NIO 有个 bug:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6265734
分享到:
相关推荐
- 高级用户可以使用Solr或Elasticsearch,它们基于Lucene,提供了分布式搜索、集群管理和更多高级特性。 在"lucensetest"文件中,可能是包含一些测试代码,用于演示如何使用上述组件和类来建立索引、执行搜索以及...
对于大型数据集,Lucene支持Solr和Elasticsearch这样的分布式搜索平台,它们在Lucene的基础上提供了集群管理和分布式索引、搜索能力。 8. **错误处理与调试** 官方文档中还包含了许多错误处理和调试技巧,帮助...
- 描述更多与 Lucene 和 Solr 相关的工具和技术。 **6.4 Solr 扩展功能** - 高级查询功能。 - 动态字段映射。 - 自定义组件和插件支持。 以上是对 Lucene 3.5 的学习笔记总结,涵盖了从索引构建到查询操作的基础...
Apache Lucene 是一个开源全文搜索引擎库,由Java编写,设计为高性能、可扩展的信息检索应用程序。它提供了丰富的搜索功能,包括索引、查询、排序等,被广泛应用于各种信息管理和检索系统中。在6.6版本中,Lucene...
《深入剖析Lucene 2.3.0源码与API》 Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护。它为开发者提供了在Java应用中实现全文搜索功能的基本工具。Lucene 2.3.0是该库的一个重要版本,包含了丰富的...
Lucene与文件系统的交互是通过其内部的Segment和Directory概念完成的。Segments是不可变的索引块,而Directory则管理这些Segment的存储位置,可以是本地磁盘、网络存储或者内存。 6. **多线程支持** Lucene支持多...
- 其他相关框架,如Solr和Elasticsearch,是在Lucene基础上构建的,提供了更高级的服务,如分布式搜索、集群管理等。 学习并实践“Lucene建立索引”,不仅可以深入了解倒排索引的工作原理,还能提升处理大规模文本...
Apache Lucene是一个高性能、全文本搜索库,由Java编写,被广泛用于开发搜索引擎和信息检索系统。这个离线版的Lucene 5.4.1官方文档提供了关于该版本的详细信息,包括API参考、指南和示例,帮助开发者更好地理解和...
Lucene还提供了许多扩展和优化工具,如Solr和Elasticsearch,它们在Lucene的基础上提供了一套完整的搜索服务框架,支持分布式索引和查询,适用于大型、高性能的搜索应用。 通过阅读《搜索引擎的搭建(Lucene)》这...
其设计目标是提供一个可以方便地在Lucene、Solr等项目中快速接入的中文分词组件。IKAnalyzer支持热更新词典,能够动态添加或删除词汇,这在处理新词汇或者特殊领域词汇时非常有用。 集成IKAnalyzer到Lucene 4.5的...
通过`Directory`接口,如`FSDirectory`,Lucene可以读写文件系统中的索引。`IndexWriter`类负责实际的索引构建过程,它允许添加、删除和更新文档。每个文档由一系列字段(Field)组成,每个字段有其特定的类型(如...
Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护。在Java编程环境中,Lucene被广泛应用于构建搜索功能,特别是对于大量文本数据的高效检索。本篇文章将通过一个简单的小示例,深入探讨Lucene的核心...
在实际应用中,Lucene通常与其他技术结合,如Spring、Solr或Elasticsearch。Spring提供了一套集成Lucene的API,使得在Spring应用中使用Lucene更为便捷。Solr和Elasticsearch是基于Lucene的分布式搜索平台,它们提供...
《Lucene实战:深入解析与应用》 Lucene,作为Apache软件基金会的开源全文检索库,是Java领域中广泛使用的搜索引擎框架。它提供了强大的文本分析、索引和搜索功能,被许多大型项目采用,如Elasticsearch、Solr等。...
- 集成Solr或Elasticsearch:尽管Lucene本身是低级库,但可以作为更高级的搜索服务Solr和Elasticsearch的基础,提供集群、分布式搜索等更多功能。 - 自定义搜索算法:Lucene允许开发者根据需求调整搜索算法,如...
Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它提供了高级的索引和搜索功能,广泛应用于各种信息检索系统。在这个“lucene5的一个简单Demo”中,我们将深入探讨如何使用 Lucene 5.x 版本...
6. **集成与扩展**:Lucene可以与其他开源项目结合,如Solr和Elasticsearch,提供更高级别的搜索服务。此外,Lucene的API允许开发者根据需求进行定制,实现更复杂的搜索逻辑和功能。 通过深入学习和实践,开发者...
**Lucene初探:一个初级的LuceneDemo** 在IT领域,搜索引擎技术是不可或缺的一部分,尤其是...在实际项目中,结合Solr或Elasticsearch这样的分布式搜索平台,Lucene可以为企业级应用提供高效、可扩展的搜索解决方案。
- 分布式搜索:通过Solr或Elasticsearch在集群环境中扩展Lucene的能力。 - 高级查询构造:布尔查询、短语查询、范围查询、模糊查询等。 - 集成到Web应用:如Spring Boot中使用Lucene。 以上内容只是Lucene全文...