原创干货 | Es Cluster 和 Solr Cloud 对比测试
Posted 大快搜索
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创干货 | Es Cluster 和 Solr Cloud 对比测试相关的知识,希望对你有一定的参考价值。
测试人:大快技术部——房宗启
一、集群环境
软件版本:
(1)本次测试使用最新的版本,Elasticsearch 5.2.1和Solr 6.4.1(截止2017-02- 23)。
(2)JDK: jdk-8u111-linux-x64
(3)Zookeeper:zookeeper-3.4.9
(4)分词器elasticsearch-analysis-ik-5.2.0
(5)kibana-5.2.0-linux-x86_64
集群环境: 由3台服务器构成的集群,具体配置为:
Cent OS 6.5操作系统,8核Intel Xeon E5520处理器,32GB内存,2T机械硬盘。
代码运行环境: 为Thinkpad x201笔记本,具体配置为:
Win7操作系统,2核4线程 Intel Core I5处理器,8GB DDR3内存,128GB固态硬盘。
二、Es和 Solr集群的安装配置
本次测试中的Es和Solr安装模式均为实际生产模式,即Es Cluster和Solr Cloud。集群的配置均使用默认配置,其中,ES使用5个Shard,1个Replica, Solr使用3个Shard,3个Replica。
为Solr安装Zookeeper集群,为Es安装IK分词器和Kibana,均使用默认配置。其中,Ik Analyzer使用 ik_smart。
三、测试数据生成策略
测试数据:
数据为模拟的blog数据,包括id, title, content, posttime四个字段。随机摘用网络上的几篇中文和英文的文章作为模拟语料库Source。用于生成title、content和查询关键词。
(1)通过空格split数据源Source,得到words数组;
(2)通过回车换行来split数据源Source,得到contents数组;
(3)索引的数据包括四个字段:id,title,content,posttime,生成策略如下:
id: int,for循环时赋值为i,在solr中,索引时的id即为该id,而es中的id由es自生成。 title: String,从words数组随机选择20个词拼接成title; content: String,从contents数组随机选取一个作为content; posttime: datetime,默认使用系统当前时间new Date(); |
索引:
Es中的索引设置为blog,类型为article,id由其自动生成,分别进行了单文档索引和批量索引测试。solr使用的collection名为core1。
提前生成需要进行索引的数据(json)格式,当生成的测试数据量较大时,为避免out of memory Exception,使用分块策略,如:索引500万数据时,每次生成并索引1万数据,循环500次;或:每次生成并索引10万数据,循环50次。
查询:
从words中随机选取1到2个词作为查询关键词,用于Es的关键词或全文检索,Solr则是全文检索。轮流生成title和content的查询条件。由于查询时间每次不固定,因此,本测试采用的是固定关键词,运行多次求平均时间和采用变化关键词,运行多次求平均值的方式来计算Es和Solr的查询时间。
时间统计:
Solr 提供索引和查询耗时的接口,索引或查询结束后可直接从response中得到。
ES 提供获得查询时间的接口,但未找到获得索引时间的接口,因此,测试中使用,使用Calendar.getInstance().getTimeInMillis();进行计时。
四、测试数据
ES和Solr的 索引性能 对比:
索引一条数据耗费的时间越短,或单位时间内索引的数据越多,搜索引擎索引性能越优。
项目 |
引擎 |
数据量 |
时间(ms) |
ms/doc |
doc/ms |
单个索引 |
Es Cluster |
3w |
246220 |
8.21 |
0.12 |
单个索引 |
Solr Cloud |
1w |
587795 |
58.78 |
0.02 |
批量索引 |
Es Cluster |
330w |
439649 |
0.13 |
7.51 |
批量索引 |
Solr Cloud |
352w |
498303 |
0.14 |
7.06 |
观察上表可得,Es在单个索引的时候,索引一个文档用时8.21ms,而Solr是55.04毫秒。
批量索引的时候,二者的索引速度相当,但Es略优于Solr。
Es和Solr的 查询性能 对比:
当搜索引擎中的基础数据量越多,平均查询时间越短时,搜索引擎的查询性能越优,其中:
关键字查询:是使用固定的1个字,查询n次,获得总查询时间,然后求平均查询时间。
关键词匹配:是使用固定的一个词,查询n次,获得总查询时间,然后求平均查询时间。
混合查询:是从语料库中随机选取一句话,长度为1到多个字或词。查询n次,获得总查询时间,然后求平均查询时间。
项目 |
引擎 |
基础数据量 |
查询次数 |
时间(ms) |
ms/次 |
关键字查询 |
Es Cluster |
700w |
9w |
541635 |
6.02 |
关键字查询 |
Solr Cloud |
700w |
2w |
354032 |
17.70 |
关键词匹配 |
Es Cluster |
700w |
2w |
388433 |
19.42 |
关键词匹配 |
Solr Cloud |
700w |
2w |
408491 |
20.42 |
混合查询 |
Es Cluster |
700w |
1w |
260176 |
26.02 |
混合查询 |
Solr Cloud |
700w |
3k |
651021 |
217+ |
另外,使用 kibana 和 Solr admin 进行长句查询,发现,当使用较长的句子,进行查询时:Es和Solr的查询时间范围为:
Es Cluster |
700w |
30+~100+毫秒左右,查询时间差在10毫秒以内 |
Solr Cloud |
700w |
4000+~5000+毫秒左右,查询时间差在1百~5百毫秒之间不等。 |
例如:查询句子:“加强大数据环境下的网络安全问题研究”,Es用时稳定在5毫秒左右,Solr用时在3000毫秒~4600毫秒之间,当重复查询该句子时,Solr查询时间将缩短到20毫秒以内,但查询性能不稳定,仍然会跳跃到60~300毫秒以上。
五、小结
通过分析以上Es和Solr的索引和查询数据可以发现:
(1)单个索引时,Es的速度是Solr的6倍。
(2)批量索引时,二者相差无几,但单位时间里,Es比 Solr多索引0.5条数据。
(3)关键字查询,Es查询速度是Solr的3倍。
(4)关键词查询,二者查询速度相差无几,但Es仍比Solr快1毫秒。
(5)混合查询时,Es的查询速度至少是Solr的8倍。
(6)长句查询,Es查询速度是Solr的50~600倍左右。
综上,在当前测试环境下进行的简单测试,可以发现:Es的索引和查询性能均优于Solr。
以上是关于原创干货 | Es Cluster 和 Solr Cloud 对比测试的主要内容,如果未能解决你的问题,请参考以下文章