原创干货 | 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 对比测试的主要内容,如果未能解决你的问题,请参考以下文章

视频 | Solr应用之日志索引系统

视频干货Solr系列|08-Solr安装和配置

Linux里面es和Solr区别是啥?

ES容易忽视的集群配置

ES和solr的区别?

视频干货14-Solr的数据导入