`

lucene/solr FSDirectory NIOFSDirectory 性能测试对比与Http11NioProtocol

 
阅读更多
原文出处: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
分享到:
评论

相关推荐

    lucene实例lucene实例

    《Lucene实战:深入解析与应用》 Lucene,作为Apache软件基金会的开源全文检索库,是Java领域中广泛使用的搜索引擎框架。它提供了强大的文本分析、索引和搜索功能,被许多大型项目采用,如Elasticsearch、Solr等。...

    lucene包,lucene实现核心代码

    - 高级用户可以使用Solr或Elasticsearch,它们基于Lucene,提供了分布式搜索、集群管理和更多高级特性。 在"lucensetest"文件中,可能是包含一些测试代码,用于演示如何使用上述组件和类来建立索引、执行搜索以及...

    lucene-4.6.0官方文档

    对于大型数据集,Lucene支持Solr和Elasticsearch这样的分布式搜索平台,它们在Lucene的基础上提供了集群管理和分布式索引、搜索能力。 8. **错误处理与调试** 官方文档中还包含了许多错误处理和调试技巧,帮助...

    lucene3.5学习笔记

    - 描述更多与 Lucene 和 Solr 相关的工具和技术。 **6.4 Solr 扩展功能** - 高级查询功能。 - 动态字段映射。 - 自定义组件和插件支持。 以上是对 Lucene 3.5 的学习笔记总结,涵盖了从索引构建到查询操作的基础...

    lucene 的开发包6.6

    Apache Lucene 是一个开源全文搜索引擎库,由Java编写,设计为高性能、可扩展的信息检索应用程序。它提供了丰富的搜索功能,包括索引、查询、排序等,被广泛应用于各种信息管理和检索系统中。在6.6版本中,Lucene...

    lucene-2.3.0-src

    《深入剖析Lucene 2.3.0源码与API》 Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护。它为开发者提供了在Java应用中实现全文搜索功能的基本工具。Lucene 2.3.0是该库的一个重要版本,包含了丰富的...

    lucene基本包

    Lucene与文件系统的交互是通过其内部的Segment和Directory概念完成的。Segments是不可变的索引块,而Directory则管理这些Segment的存储位置,可以是本地磁盘、网络存储或者内存。 6. **多线程支持** Lucene支持多...

    Lucene建立索引

    - 其他相关框架,如Solr和Elasticsearch,是在Lucene基础上构建的,提供了更高级的服务,如分布式搜索、集群管理等。 学习并实践“Lucene建立索引”,不仅可以深入了解倒排索引的工作原理,还能提升处理大规模文本...

    lucene 5.4.1 官方文档离线版

    Apache Lucene是一个高性能、全文本搜索库,由Java编写,被广泛用于开发搜索引擎和信息检索系统。这个离线版的Lucene 5.4.1官方文档提供了关于该版本的详细信息,包括API参考、指南和示例,帮助开发者更好地理解和...

    搜索引擎的搭建(Lucene)代码

    Lucene还提供了许多扩展和优化工具,如Solr和Elasticsearch,它们在Lucene的基础上提供了一套完整的搜索服务框架,支持分布式索引和查询,适用于大型、高性能的搜索应用。 通过阅读《搜索引擎的搭建(Lucene)》这...

    IK分词器集成lucene4.5使用方法

    其设计目标是提供一个可以方便地在Lucene、Solr等项目中快速接入的中文分词组件。IKAnalyzer支持热更新词典,能够动态添加或删除词汇,这在处理新词汇或者特殊领域词汇时非常有用。 集成IKAnalyzer到Lucene 4.5的...

    Lucene 常用功能介绍视频详解

    通过`Directory`接口,如`FSDirectory`,Lucene可以读写文件系统中的索引。`IndexWriter`类负责实际的索引构建过程,它允许添加、删除和更新文档。每个文档由一系列字段(Field)组成,每个字段有其特定的类型(如...

    lucene 索引小示例

    Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护。在Java编程环境中,Lucene被广泛应用于构建搜索功能,特别是对于大量文本数据的高效检索。本篇文章将通过一个简单的小示例,深入探讨Lucene的核心...

    lucene专题教程代码

    在实际应用中,Lucene通常与其他技术结合,如Spring、Solr或Elasticsearch。Spring提供了一套集成Lucene的API,使得在Spring应用中使用Lucene更为便捷。Solr和Elasticsearch是基于Lucene的分布式搜索平台,它们提供...

    lucene-2.0

    - 集成Solr或Elasticsearch:尽管Lucene本身是低级库,但可以作为更高级的搜索服务Solr和Elasticsearch的基础,提供集群、分布式搜索等更多功能。 - 自定义搜索算法:Lucene允许开发者根据需求调整搜索算法,如...

    lucene5的一个简单Demo

    Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它提供了高级的索引和搜索功能,广泛应用于各种信息检索系统。在这个“lucene5的一个简单Demo”中,我们将深入探讨如何使用 Lucene 5.x 版本...

    lucene-4.6.0

    6. **集成与扩展**:Lucene可以与其他开源项目结合,如Solr和Elasticsearch,提供更高级别的搜索服务。此外,Lucene的API允许开发者根据需求进行定制,实现更复杂的搜索逻辑和功能。 通过深入学习和实践,开发者...

    Lucene初探,一个初级的LuceneDemo

    **Lucene初探:一个初级的LuceneDemo** 在IT领域,搜索引擎技术是不可或缺的一部分,尤其是...在实际项目中,结合Solr或Elasticsearch这样的分布式搜索平台,Lucene可以为企业级应用提供高效、可扩展的搜索解决方案。

    全文检索Lucene 全文检索Lucene

    - 分布式搜索:通过Solr或Elasticsearch在集群环境中扩展Lucene的能力。 - 高级查询构造:布尔查询、短语查询、范围查询、模糊查询等。 - 集成到Web应用:如Spring Boot中使用Lucene。 以上内容只是Lucene全文...

Global site tag (gtag.js) - Google Analytics