HubbleDotNet+Mongodb构建高性能搜索引擎
性能测试
测试环境:
软件版本
HubbleDotNet 版本 1.2.5.0
Mongodb 版本 2.0.5
SQL SERVER 2008
Lucene.net 2.9.4
系统环境
Intel i5 2430M 2.40GHz 8GB windows 7 64bit
7800 转机械硬盘
测试数据
测试数据为2000万行互联网网页数据。数据文件大小为4GB。
测试目标:
测试hubble+sqlserver, Hubble+Mongodb 以及lucene.net 在单机系统高并发时的性能比较。
测试方法:
通过测试代码每秒钟查询10次,查询840个常用英文单词的搜索,返回前10条title 和 content ,按匹配度排序
测试用例1:
在这个测试用例中,我们取消hubbledotnet 所有的缓存,让 hubbledotnet 每次都从硬盘读索引,lucene.net 也设置为从文件读取。对840个英文单词的查询全部是首次查询。而且每次测试前重启计算机以清除操作系统的文件缓存。
测试结果如下:
| 每秒钟查询次数 | 最大查询时间(ms) | 平均查询时间(ms) | 最小查询时间(ms) |
Hubble+Mongodb | 10 | 1573 | 431 | 3 |
Hubble+SQL SERVER | 10 | 8997 | 931 | 4 |
Lucene.net | 10 | 209196 | 108665 | 9430 |
测试用例2:
在这个测试用例中,我们在 hubbledotnet 中指定RamIndex 为Full,即将索引全部加载到内存,lucene.net 也设置为内存索引。这个测试主要是测试内存索引的性能。
测试结果如下:
| 每秒钟查询次数 | 最大查询时间(ms) | 平均查询时间(ms) | 最小查询时间(ms) | 内存(MB) |
Hubble+Mongodb | 10 | 148 | 5.53 | 1 | 1,164 |
Hubble+SQL SERVER | 10 | 157 | 6.17 | 0 | 1,170 |
Lucene.net | 10 | 230 | 3.58 | 0 | 3,611 |
而最大查询时间hubble比lucene快将近1倍,这个基本反映出查询算法性能的优劣。这个和我的另外的测试结果(另文阐述)基本是吻合的,即按照score排序,hubble 的查询速度大概是 lucene.net 的2倍,按其它字段排序,大概为5倍左右。
内 存占用方法,Lucene.net 占用3.6GB内存,hubbledotnet占用 1.1 GB 内存,这个主要是因为 hubbledotnet 的索引比 lucene.net 要小的缘故。HubbleDotNet 的内存占用还可以优化,优化后对于本例来说应该可以减少到800MB 左右。
持久化方面,hubbledotnet的内存索引是可以自动持久化的,就是说运行过程中的增删改的变化会自动存储到文件介质中,并更新到内存中,这样即使机器重启也不会丢失数据。lucene.net 的内存索引方案是无法自动持久化的,需要另外写程序持久化。