(转)HubbleDotNet 和 Lucene.net 性能对比测试

HubbleDotNet 从 2009 年11月份发布第一个版本以来, 只对 0.7
版本做过一次性能对比测试,原因是近一年来,HubbleDotNet一直在做性能优化,截至2010年9月,性能已经优化的差不多了,索引和查询的性能比 0.7
版本时提高了很多倍。这两天重新对HubbleDotNet 与 Lucene.Net 做了性能对比测试。下面就公布一下我的测试数据。

测试版本


HubbleDotNet 0.9.7.0

Lucene.Net 2.9.2.1

盘古分词 2.3.1.0

测试环境


Intel 双核 1.80 GHz, 2G Ram 笔记本电脑,硬盘转速 5400 转

Windows XP

测试数据


测试数据为430万行中文论文数据,索引论文标题和摘要,原始数据大小为 2G。

测试方法


索引


HubbleDotNet 采用被动方式 Append Only 模式对论文数据库现有表进行索引。索引后优化。

Lucene.Net 则是从数据库读取记录进行索引,数据存储在Lucene.Net 索引中。索引后优化。

搜索

搜索测试分三个测试用例

1. 测试单个词搜索,不同返回结果集大小时的单次搜索时间

2. 测试多个词同时搜索,不同返回结果集大小时的单次搜索时间

3. 测试相近结果集大小下,不同单词数量的单次搜索时间

测试方法为


HubbleDotNet 取消所有缓存设置,循环执行查询语句10次,计算平均值。重复这个过程3次,取最小的时间

Lucene.net 没有设置缓存的地方,所以就直接循环查询 10次,计算平均值。重复这个过程3次,取最小的时间

两者都是返回前25 条记录的 摘要数据,并按得分从大到小排序。

测试结果


索引


HubbleDotNet 索引(包括优化) 用时 5200 秒 (0.9 版本)

HubbleDotNet 1.0.1.0 版本索引部分算法又进行了优化,索引(包括优化) 用时 4611 秒

Lucene.net 索引(包括优化) 用时 8700 秒

HubbleDotNet 索引文件大小总和为 1.30 GB

Lucene.net 索引文件大小总和为 3.48GB

搜索


用例1

测试搜索单个单词,结果集大小分别在 10万,20万,50万,100万,200万,400万 级别两者的性能对比。

其中

HubbleDotNet (Match) 指采用Match 方法进行搜索,就是各个单词分量以或的方式匹配。

HubbleDotNet (Cache) 指采用Match 方法进行搜索,并打开数据缓存后的结果。

测试语句示例:

select top 25 docid, abstract from AllIndex where abstract match ‘基于‘ order by score desc

原始数据如下:












































Word Result Lucene.net HubbleDotNet 
Match
HubbleDotNet 
Cache
基于 97539 77.8 40.84 2.38
实验 171383 74.8 57.29 1.57
发展 501510 523 104.59 3.86
918853 114.8 126.95 4.07
. 1956000 191.8 237.99 2.33
3991397 303 380.06 3.72

结论:

Lucene.net 在某些词上,不知道为什么会出现毛刺,比如 发展这个词,我重复测了多次,都是
500多毫秒,不知道为什么,可能和其索引的结构有关。

对于结果集大小在50万以内的情况,HubbleDotNet 要比Lucene.net 快不少。

而对于较大结果集,两者差别不大,不过 HubbleDotNet 的搜索算法不会对某些关键词出现毛刺,基本上是一个缓慢递增的过程。

用例2


测试搜索7个单词,多关键字查询,结果集大小分别在 15万,40万,80万,150万,300万,400万 级别两者的性能对比。

通常情况下,搜索都是多关键字的,所以这个测试可能更接近实际情况。

其中

HubbleDotNet (Match) 指采用Match 方法进行搜索,就是各个单词分量以或的方式匹配。

HubbleDotNet (Contains) 指采用Contains 方法进行搜索,就是各个单词分量以与的方式匹配。这个测试为和Match
相同关键字情况下的搜索耗时,但由于是与方式,结果集大小会比Match 要小很多。

HubbleDotNet (Cache) 指采用Match 方法进行搜索,并打开数据缓存后的结果。

测试语句示例:

select top 25 docid, abstract from AllIndex 
where abstract match ‘塑料 构建 数学 群体 毅力 所有‘ order by score desc
 
select top 25 docid, abstract from AllIndex 
where abstract contains ‘塑料 构建 数学 群体 毅力 所有‘ order by score desc

测试原始数据:



















































Word Result Lucene.net HubbleDotNet 
Match
HubbleDotNet 
Contains
HubbleDotNet 
Cache
塑料 构建 数学 群体 毅力 所有 153035 361.8 31.47 8.84 2.02
获得 教育 数学 群体 毅力 所有 408175 419.4 46.37 9.69 2.42
获得 教育 数学 群体 毅力 发展 788078 723.4 81.5 9.09 2.43
获得 教育 数学 个 毅力 发展 1485791 886.4 129.33 15.93 2.45
. 教育 数学 个 毅力 发展 2770563 1211.8 208.56 13.15 2.31
数学 的 教育 个 毅力 发展 4034774 1491.2 285.83 13.39 1.2

结论:

多关键字情况下 HubbleDotNet 比 Lucene.Net 具有明显的优势,Match 方法大概比Lucene.net
快5-10倍,而Contains 方法则比Lucene.net 快上百倍。

用例3


测试搜索1个单词到7个单词,结果集大小分别在100万级别时两者的性能对比。

这个测试主要是想看看搜索关键字的数量对搜索效率的影响。

其中

HubbleDotNet (Match) 指采用Match 方法进行搜索,就是各个单词分量以或的方式匹配。

HubbleDotNet (Contains) 指采用Contains 方法进行搜索,就是各个单词分量以与的方式匹配。这个测试为和Match
相同关键字情况下的搜索耗时,但由于是与方式,结果集大小会比Match 要小很多。

HubbleDotNet (Cache) 指采用Match 方法进行搜索,并打开数据缓存后的结果。

测试原始数据:


































































Word Result Lucene.net HubbleDotNet
Match
HubbleDotNet
Contains
HubbleDotNet 
Cache
Number
918853 114.8 126.95 109.74 2.33 1
个 毅力 919277 193.4 57.88 57.52 2.41 2
毅力 个 配方 929364 202.6 63.38 3.86 1.11 3
毅力 个 数学 配方 948084 300.9 59.08 5.31 2.32 4
毅力 个 数学 配方 群体 958049 291.6 64.07 5.54 2.05 5
毅力 个 数学 获得 配方 群体 1032700 330.1 80.59 5.5 1.09 6
毅力 个 数学 获得 配方 群体 密切 1066529 334.6 85.84 5.78 2.35 7

结论:

在单个关键字时,Lucene.net 和 HubbleDotNet
的搜索速度是接近的,但随着关键字的增多,两者的差距就明显增大了,HubbleDotNet 具有明显的优势。

附录


Lucene.Net 测试的部分代码

            string keywords = q;
 
            IndexSearcher search = new IndexSearcher(indexDir);
            QueryParser queryParser = new QueryParser("abstract", new PanGuAnalyzer());
 
            Query query = queryParser.Parse(q);
 
            Hits hits = search.Search(query);
 
            List<News.TNews> result = new List<News.TNews>();
 
            recCount = hits.Length();
            int i = (pageNo - 1) * pageLen;
 
            while (i < recCount && result.Count < pageLen)
            {
                News.TNews news = new TNews();
                news.Content = hits.Doc(i).Get("abstract");
                result.Add(news);
                i++;
            }
 
            search.Close();
            return result;

这是搜索部分的代码,pageLen = 25

转载自:http://www.cnblogs.com/eaglet/archive/2010/09/03/1816856.html

时间: 2024-08-25 03:30:24

(转)HubbleDotNet 和 Lucene.net 性能对比测试的相关文章

MongoDB V3 &amp; V2 版本锁性能对比测试及锁的基本概况

1.mongo锁概况: 各版本锁的特性: 当前版本 生产版本最高是 2.6.7[Production Release (2.6.7)] 开发版本是 3.0.0-rc7[Development Releases (unstable)3.0.0] Version < 2.2 : 只支持进程级锁,一个Mongod实例一个锁. 2.8 >Version >= 2.2 : 支持库级锁,一个db一把锁. 目前3.0.0 支持 collection 级别的锁. ps:Mysql的innoDB和Orac

HAWQ与Hive查询性能对比测试

一.实验目的 本实验通过模拟一个典型的应用场景和实际数据量,测试并对比HAWQ内部表.外部表与Hive的查询性能. 二.硬件环境 1. 四台VMware虚机组成的Hadoop集群.2. 每台机器配置如下:(1)15K RPM SAS 100GB(2)Intel(R) Xeon(R) E5-2620 v2 @ 2.10GHz,双核双CPU(3)8G内存,8GSwap(4)10000Mb/s虚拟网卡 三.软件环境 1. Linux:CentOS release 6.4,核心2.6.32-358.el

MemSQL、SQLFire、Oracle XE性能对比测试

1.软件版本 MemSQL 3.1 Pivotal SQLFire 1.1.2 Oracle 11g XE 2.测试环境 宿主机 OS:Windows 7 64位 专业版 CPU:i7-3770 3.4GHz 内存:16G 硬盘:大于800G VMware虚拟机 OS:CentOS 6.3 64位 内存:16G 其中MemSQL运行于虚拟机,SQLFire和Oracle直接运行于宿主机 SQLFire只开启一个server member 3.DDL MemSQL DROP TABLE t_mai

SSD与HDD性能对比测试

准备工作 操作系统:CentOS6.4 64位 D          B:MySQL5.6.22 64位 硬        盘:SSD(Shannon Direct-IO 1.6TB).HDD 测试工具:sysbench0.5 监控工具:zabix 一.安装sysbench 0.5 sysbench 0.5相比0.4版本的主要变化是,oltp测试结合了lua脚本,不需要修改源码,通过自定义lua脚本就可以实现不同业务类型的测试.同时0.5相比0.4需要消耗更多的cpu资源. 下载sysbench

python、node、php、go、java性能对比测试

闲来无事!!!测下编程语言谁跑的快,不作为标准评定,不喜勿喷 机器配置:8核i7 16G内存 测试1:n以内的整数累加,时间单位毫秒,每次测试10组 总结 java 还是老大哥.在三个测试环境性能表现稳定 go 是真特么快 node 跑的比php python快 php 和 python一个档次的 负载量级上升,php python成性能下降特别大.java>go=node 1.go实现 package main import ( "fmt" "time" &

(转)HubbleDotNet+Mongodb 构建高性能搜索引擎--概述

HubbleDotNet 从 1.2.3 版本以后开始在官方代码中支持和 Mongodb 对接,Mongodb 是10gen 公司开发的 no-sql 数据库,其读写性能比传统关系数据库要快很多,而且可以非常方便的分布式部署.HubbleDotNet 通过支持 Mongodb 也使其本身同时具备了 no-sql 的解决方案.本文将重点概述Hubble+Mongodb 的功能以及和hubble+sql , lucene.net 的一些性能测试对比. Mongodb 的安装 在开始本文之前,我们简单

SAS vs SSD对比测试MySQL tpch性能

早先已经做过一次OLTP性能对比测试:SAS vs SSD各种模式下MySQL TPCC OLTP对比测试结果,这次做OLAP对比测试. 对比测试结果见下: SSD设备相应的性能提升比例: 测试环境: --------------------------------------分割线-------------------------------------- 知数堂 (http://zhishuedu.com)培训是由资深MySQL专家叶金荣.吴炳锡联合推出的专业优质培训品牌,主要有MySQL

3大主流NoSQL数据库性能对比测试报告

近日,知名独立基准测评机构Bankmark,针对目前市面上主流的NoSQL数据库SequoiaDB.MongoDB以及Cassandra三款NoSQL数据库产品做了性能对比测试并发布测试报告.在所有的测试中,三款NoSQL数据库产品的表现各有千秋,没有那款产品能在所有测试场景中完败对手,就整体表现而言SequoiaDB与Cassandra不相上下表现上佳,而MongoDB表现却不理想属于垫底的存在. 测试机构: Bankmark是一家德国的独立基准测评机构,业内著名的NoSQL性能测试团队. 测

1、什么是Lucene,Lucene能干什么

1.什么是lucene  Lucene是一个全文搜索框架,而不是应用产品.因此它并不像http://www.baidu.com/ 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品. 2.lucene能做什么  要回答这个问题,先要了解lucene的本质.实际上lucene的功能很单一,说到底,就是你给它若干个字符串,然后它为你提供一个全文搜索服务,告诉你你要搜索的关键词出现在哪里.知道了这个本质,你就可以发挥想象做任何符合这个条件的事情了.你可以把站内新闻都