1、关键特性对比
对比项 开发人员 Solr 5.x ElasticSearch多 ElasticSearch 2.x 丰富,扩展能力更强 开发人员少,官方提供功能比开发人员多,官方功能少,但是第三方插件很建立索引的速度和ElasticSearch差不建立索引的速度和Solr差不多,第一次搜索多,当索引完全建立好了之后搜索会速度比Solr慢一些,但之后会缓存结果,第建立索引很快,但是一边建立索引一边搜索就二次搜索就会很快。另外ElasticSearch边建立和查询效会非常慢。经过详细对比测试后发现,索引边搜索速度没有太大变化,因为它是先把率 Solr在建索引时的查询性能非常之索引的内容保存到内存之中,当内存不够时再差,因为Solr在建索引时会产生io的把索引持久化到硬盘中,同时它还有一个队阻塞,造成搜索性能的下降。 Sharding 没有自动shard rebalancing的功能 列,是在系统空闲时自动把索引写到硬盘中。 shard 必须一次设置好,之后不能修改,如果要修改则需要重新建立索引 无需Schema,创建索引更加灵活 有Query DSL,能够支持更加高级和复杂的查高级查询 实时性 可扩展性 社区 Hadoop集成 存储 没有Query DSL 传统搜索应用 不支持插件开发模式 社区活跃 支持 Solr暂不支持 询语法,而且还可以以此扩展实现类SQL语法的查询 实时搜索应用(这个是ElasticSearch作者说的) 支持插件开发模式,提供丰富的开源插件库 社区活跃并有大数据公司支持 支持,v2.3.0提供Graph图结构数据存储 ElasticSearch支持多盘存储 Schema模需要Schema (但是4.3版本之后有式 schemaless模式) 2、基于ElasticSearch数据交叉模型功能测试
2.1、环境情况
1.测试环境(市局环境) IP CPU 10.65.6.143/slave1~10.65.6.177/slave35 16* Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz MEM OS 2.测试数据 数据来源 时间范围 数据量 测试数据查询地址 3.测试地址 url 64G(ElasticSearch独享16G) CentOS release 6.5 (Final) 省厅数据:VW_SHARE_ST_JJ_KKXX(交警_卡口信息) 20151001~20160331 kettle清洗,数据量为11.1亿 http://10.65.6.143:8200/_plugin/head/ http://10.65.6.141:18099/swagger-ui.html
2.2、测试结果
场景一:一个车牌交叉满足N个条件 交叉序条号 件个数 [{\"datestart\": \"2016-01-05T08:40:59\\"location\": \"犍为县\\"2016-01-05T08:53:59\\"querystr\": \"犍为外滩\{\"datestart\": \"2016-02-03 1 3 09:48:00\乐山市\川LFC550 3 川LFC550 3 \"dateend\": \"2016-02-03 19:48:00\\"querystr\": \"月卡口\{\"datestart\": \"2016-01-07 19:47:18\南充市\\"dateend\": \"2016-01-07 19:57:18\\"querystr\": \"绿心路\[{\"datestart\": \"2016-01-15T07:08:00\\"location\": \"成华区\\"2016-01-15T07:18:22\\"querystr\": \"双桥子\2 3 {\"datestart\": \"2016-01-05T06:39:44\\"location\": \"锦江区\\"2016-01-05T06:41:44\\"querystr\": \"老成仁路口\{\"datestart\": 1 川AW7D16 3 川AW7D16 3 1 1 在之前测试中,曾出现结果为川AW7D16 0 的情况,经定位,是分词不够完善,修改代码后,结果正确 2 2 10 在之前的测试时,曾出现结果为川LFC550 2的情况,经定位是对“犍为县”的分词不完善,修改代码后,结果正确 测试用例 预期结果 实际结果 3次测试耗时(s) 备注 \"2016-01-25T20:40:46\\"location\": \"武侯区\\"2016-01-25T20:44:46\\"querystr\": \"科华北路\[{\"datestart\": \"2016-02-06T17:48:41\\"location\": \"四川省\\"2016-02-06T17:49:41\\"querystr\": \"海棠路\{\"datestart\": \"2016-02-04T10:36:43\3 3 \"location\": \"富顺县\贵JL7321 3 贵JL7321 3 \"2016-02-04T10:36:44\\"querystr\": \"钟秀街东段\{\"datestart\": \"2016-02-04T13:10:50\\"location\": \"富顺县\\"2016-02-04T13:10:53\\"querystr\": \"吉安庄路\[{\"datestart\": \"2016-02-16T15:06:57\\"location\": \"泸定县\\"2016-02-16T15:06:57\\"querystr\": \"石油路\{\"datestart\": \"2015-12-09T16:10:58\\"location\": \"新龙县\\"2015-12-09T16:10:58\4 4 \"querystr\": \"卡口抓拍机\{\"datestart\": \"2016-01-07T10:46:17\\"location\": \"泸定县\\"2016-01-07T10:46:17\\"querystr\": \"船头\{\"datestart\": \"2016-02-16T18:10:20\\"location\": \"雅安市\\"2016-02-16T18:10:20\\"querystr\": \"名山红星\[{\"datestart\": \"2015-11-05T13:39:46\\"location\": \"内江市\5 2 \"2015-11-05T13:39:46\\"querystr\": \"兰桂\{\"datestart\": \"2015-11-21T11:24:24\1 川K0103学 2 川K0103学 2 11 9 3 川AE15F8 4 川AE15F8 4 5 2 1 2 11 \"location\": \"内江市\\"2015-11-21T11:24:24\\"querystr\": \"牌楼路\[{\"datestart\": \"2015-12-01T15:06:39\\"location\": \"广安市华蓥市\\"dateend\": \"2015-12-01T15:06:39\\"querystr\": \"古桥职中\{\"datestart\": \"2015-09-30T15:13:34\\"location\": \"广安市\\"2015-09-30T15:16:34\\"querystr\": \"会展街\{\"datestart\": \"2016-02-12T12:15:10\6 5 \"location\": \"广安市\渝B18D02 5 渝B18D02 5 \"2016-02-12T12:15:10\\"querystr\": \"高速\{\"datestart\": \"2016-02-10T08:11:49\\"location\": \"广安市\\"2016-02-10T08:11:59\\"querystr\": \"前华段出城\{\"datestart\": \"2016-02-05T12:36:06\\"location\": \"广安市\\"2016-02-05T12:39:06\\"querystr\": \"马石梯\[{\"datestart\": \"2016-01-01T22:06:37\\"location\": \"青羊区\\"2016-01-01T22:06:37\\"querystr\": \"苏坡立交\{\"datestart\": \"2016-01-22T21:17:18\\"location\": \"武侯区\7 6 \"2016-01-22T21:17:18\\"querystr\": \"人民南路三段\{\"datestart\": \"2016-02-14T00:01:26\\"location\": \"金牛区\\"2016-02-14T00:01:26\\"querystr\": \"营门口\{\"datestart\": \"2016-02-08T11:47:08\\"location\": \"成华区\1 川ATS958 6 川ATS958 6 6 20 3 6 4 \"2016-02-08T11:47:08\\"querystr\": \"桃溪路\{\"datestart\": \"2015-11-02T15:00:22\\"location\": \"锦江区\\"2015-11-02T15:00:22\\"querystr\": \"琉璃\{\"datestart\": \"2015-10-13T09:34:12\\"location\": \"武侯区\\"2015-10-13T09:34:12\\"querystr\": \"双楠路内侧\[{\"datestart\": \"2016-01-01T22:06:37\\"location\": \"市青羊\\"2016-01-01T22:06:37\\"querystr\": \"苏坡立交\{\"datestart\": \"2016-01-22T21:17:18\\"location\": \"武侯区\\"2016-01-22T21:17:18\\"querystr\": \"人民南路三段\{\"datestart\": \"2016-02-14T00:01:26\\"location\": \"金牛区\\"2016-02-14T00:01:26\8 6 \"querystr\": \"营门口\{\"datestart\": \"2016-02-08T11:47:08\\"location\": \"成华区\\"2016-02-08T11:47:08\\"querystr\": \"桃溪路\{\"datestart\": \"2015-11-02T15:00:22\\"location\": \"锦江区\\"2015-11-02T15:00:22\\"querystr\": \"琉璃\{\"datestart\": \"2015-10-13T09:34:12\\"location\": \"武侯区\\"2015-10-13T09:34:12\\"querystr\": \"双楠路内侧\[{\"datestart\": 9 1 \"2016-01-05T08:40:59\\"location\": \"犍为县\\"2016-01-05T08:53:59\川LFC550 1 川LFC550 1 1 2 1 2 川ATS958 5 川ATS958 5 2 3 \"querystr\": \"犍为外滩\场景二:关注时间和地点,多个车牌满足其中1~N个条件 交叉序条号 件个数 [{\"datestart\": \"2016-02-07T16:44:10\\"location\": \"广安市\\"2016-02-07T16:44:20\\"querystr\": \"人民南路\{\"datestart\": \"2016-02-10T11:08:08\1 3 \"location\": \"广安市\\"2016-02-10T11:09:09\\"querystr\": \"民族小学\{\"datestart\": \"2016-01-14T19:53:10\\"location\": \"武胜县\\"2016-01-14T19:53:12\\"querystr\": \"58KM\[{\"datestart\": \"2016-01-01T00:00:00\\"location\": \"德阳市\\"2016-01-04T00:00:00\\"querystr\": \"西山\{\"datestart\": \"2016-02-22T08:10:55\\"location\": \"德阳市\\"2016-02-22T08:10:55\2 4 \"querystr\": \"108国道\{\"datestart\": \"2015-11-16T06:17:58\\"location\": \"罗江县\\"2015-11-16T06:17:58\\"querystr\": \"学校\{\"datestart\": \"2016-01-03T16:53:16\\"location\": \"绵阳市\\"2016-01-03T16:53:16\\"querystr\": \"东路\6 川FAH567 2川FL1930 2川FAH567 2川FL1930 2 1 3 9 粤YQJ221 2粤YQJ221 2 4 8 测试用例 预期结果 实际结果 3次测试耗时(s) 备注 川XW6238 2 川XW6238 1 川A9EB55 2 川A9EB55 2
3、ElasticSearch与Solr的压力测试对比
3.1、测试环境
1.集群环境 此次用于测试Solr的集群包括4个节点:172.16.50.80(master),172.16.50.81~172.16.50.83(slave1~slave3)。 用于测试ElasticSearch的集群包括4个节点:172.16.50.80(datanode,不可选举为masternode),172.16.50.81~172.16.50.83(datanode、可选举为masternode)。 测试集群信息: IP 172.16.50.80~172.16.50.83 CPU 8* Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz Mem OS 测试客户机(临时使用slave3): Solr:4G,ElasticSearch:4G(sys32G) CentOS release 6.5 IP 172.16.50.83 CPU 8* Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz Mem OS 2.数据环境
Solr中单索引库中索引条数为5000W,ElasticSearch中单索引库中索引条数为1亿。
Solr4G ElasticSearch4G(sys32G) CentOS release 6.5 3.2、测试工具
工具名称 输入参数说明 http_load http_load -p 5 -f 1000 train_hc.txt -parallel 简写-p:并发的用户进程数 -fetches 简写-f:总计的访问次数 -rate 简写-r:每秒的访问频率 -seconds 简写-s:总计的访问时间 输出参1000 fetches, 5 max parallel, 1.13104e+06 bytes, in 4.50961 seconds 运行的数说明 请求数、最大的并发进程数、总计传输的数据、运行的时间 1131.04 mean bytes/connection 平均每个请求连接传输的数据量 221.748 fetches/sec, 250807 bytes/sec 每秒响应请求数、每秒传输数据量 msecs/connect: 0.485064 mean, 1.337 max, 0.384 min连接平均响应时间、最大响应时间、最小响应时间 msecs/first-response: 21.7613 mean, 436.541 max, 13.468 min 连接平均返回时间 321 bad byte counts HTTP response codes:请求响应码返回个数 code 200 -- 1000 3.3、测试结果
注:每组测试均重复进行三次。 场景一:模糊数字查询 查询条件:\"q\":\"31997\" 统计测试结果如下: 并发数 总访问次数 搜索引擎 平均每秒响应请求数(fetches/s) 总消耗时间(s) 连接平均响应时间(ms) 10 10000 Solr ElasticSearch 25 10000 Solr ElasticSearch 50 10000 Solr ElasticSearch 100 10000 Solr ElasticSearch 200 10000 Solr ElasticSearch 500 10000 Solr 239.664 552.471 530.819 677.385 664.680 686.340 718.751 699.838 631.869 632.789 38.925 41.725 18.101 18.839 14.763 15.045 14.570 13.913 14.289 15.826 15.803 256.908 0.163 0.130 0.777 0.128 0.205 0.130 0.243 0.440 0.289 4.370 1.971 40.467 17.641 44.675 36.428 73.096 72.287 136.493 141.773 310.823 310.030 1848.690 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 647 0 0 0 0 0 0 0 0 0 0 9353 连接平均返回时间(ms) 平均成功次数 平均失败次数 ElasticSearch 800 10000 Solr ElasticSearch 1000 10000 Solr ElasticSearch 1200 10000 Solr ElasticSearch 场景二:精确中文查询 查询条件:\"q\":\"人民南路\" 统计测试结果如下: 并发数 总访问次数 搜索引擎 680.432 166.503 521.349 166.123 692.361 41.609 164.705 14.697 60.059 19.181 60.196 14.443 240.331 60.715 4.941 2.433 39.664 7.802 81.532 92.813 187.910 716.010 278.374 1425.580 386.798 1276.000 407.150 841.637 10000 113 9782 148 9848 101 1552 0 9887 218 9852 152 9899 8448 平均每秒响应请求数(fetches/s) 总消耗时间(s) 连接平均响应时间(ms) 连接平均返回时间(ms) 平均成功次数 平均失败次数 10 10000 Solr ElasticSearch 25 10000 Solr ElasticSearch 50 10000 Solr ElasticSearch 100 10000 Solr ElasticSearch 200 10000 Solr ElasticSearch 500 10000 Solr ElasticSearch 800 10000 Solr ElasticSearch 274.665 606.135 496.524 832.066 528.967 822.151 499.614 848.299 463.910 785.509 155.626 827.331 166.106 814.860 36.408 16.498 20.140 12.018 18.905 12.163 20.016 11.788 21.556 12.731 64.256 12.087 60.203 12.272 0.159 0.133 0.173 0.122 0.392 0.132 0.313 1.236 0.358 2.071 10.400 9.174 7.612 30.071 35.091 16.040 48.379 29.581 91.614 60.282 196.558 115.989 422.760 249.898 183.311 576.567 343.538 912.044 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 798 10000 220 10000 0 0 0 0 0 0 0 0 0 0 9202 0 9780 0 1000 10000 Solr ElasticSearch 1200 10000 Solr ElasticSearch 166.018 867.418 165.702 165.516 60.234 11.529 60.350 60.417 2.354 46.730 79.148 185.596 451.489 1026.290 428.162 734.681 228 9859 278 1599 9772 141 9722 8401 3.4、总结
在本次测试中,每次测试总的访问次数为10000,从以上图表中可以看出随着并发数的增加,Solr和
ElasticSearch的每秒响应请求数都是先增加,然后稳定在一定数值,在超过某个阈值之后极速下降;
从平均每秒响应请求次数来看,ElasticSearch性能指标优于Solr;在不同的并发数下,ElasticSearch
的每秒响应请求数在500~800之间,而Solr的每秒响应请求数在300~600之间,ElasticSearch采用
默认分词进行中文模糊搜索时速度非常慢,经分析更换ik中文分词后性能有明显提高;
从连接平均返回时间来看,在低并发时,ElasticSearch和Solr相差不大,但是随着并发数量的增加,
ElasticSearch返回时间的增长速度大于Solr;
从不同的并发数下的成功次数来看,ElasticSearch性能指标优于Solr,Solr在并发数达到500的时候出
现大面积错误;ElasticSearch直到并发数为1000的时候才出现了错误;
Solr集群不太稳定,12月30日简单测试过一次,当时并发达到1000时才开始出现性能大幅下降,并
且平均每秒响应请求数在600左右,而31日则在并发500时表现有较大差距。
4、ElasticSearch与Hadoop平台的融合
4.1、ElasticSearchonYarn
ElasticSearch可以通过Yarn来运行,官网有相关教程,但由于Yarn资源的限制,目前ElasticSearchforHadoop还是beta版,并不包含ElasticSearch的所有功能。而且ElasticSearch程序作为一个zip压缩包安装到HDFS上,要修改配置或者安装插件只能在外面重新打包安装好了上传到HDFS上,操作麻烦。
参考资料:https://www.elastic.co/guide/en/elasticsearch/hadoop/master/es-yarn.html。
4.2、ElasticSearchonMesos
ElasticSearch可以和Mesos整合,参考资料:https://github.com/mesos/elasticsearch,但官网没有相关支持,没有试验成功。
4.3、结论
ElasticSearch虽然可以通过Yarn或者Mesos来进行统一资源管理,但目前功能并不完善,实践案例也不多,可行性和稳定性都需要验证。鉴于操作的便利性和稳定性考虑,目前并不适合在实际生成环境中采用该模式来管理ElasticSearch集群环境。
5、交警卡口数据交叉查询API
请求url method 参数说明 http://10.65.6.141:18099/chinacloud/api/seeker/v1/algorithms/jjkkxxjc?query= GET query后为查询参数,是多组条件的数组,每组条件的字段名固定,其中datestart是开始时间,dateend是结束时间,location是行政区划的中文名称,querystr是查询的关键字,该字段可以分词。 返回结果是满足条件多组数据的list,每组数据是车牌号以及其在所给条件组数中出现的次数的组合,如下所示: { \"result\": [ [ \"川AW7D16\ ], [ \"CC00073\ 2 ], 返回示例 [ \"川A2Z8G9\ ], [ \"川A717TN\ ], ... ... ], \"cost\": \"4s\ \"status\": \"success\" }
因篇幅问题不能全部显示,请点此查看更多更全内容