Elasticsearch性能测试
2015-08-07 23:47
309 查看
缘起
已发布至个人博客工作中遇到这样一个问题,业务中有一个支持文本检索的功能,原本在数据量小的时候,世界都很平静,可是当数据条数从5W涨到了100W+的时候,世界变了,响应时间急剧增长。怎么破?这时想到了文本检索的神器elasticsearch。立马拿来试用一下。
测试
1.到官网上下载了es的最新版本,地址在这里,解压后就可以直接用了。因为地址是https的,所以下载的时候需要添加上–no-check-certificate,如下所示wget --no-check-certificate https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.1.tar.gz[/code]
解压,直接运行报错,查了下发现是对jdk版本有要求,升级没商量
然后直接打开就好了,当然这是单机版的情况
下面贴出性能测试的结果:
100W的记录,30个字符的name。无其他数据。好单薄的数据。查询条件为随机字符,构造长度为1-30的字符,每个长度字符查询1000次。代码段如下:function esTimesTest() { $b = microtime(true); $b1 = time(); for ($i = 1; $i <= 100; ++$i) { for ($j = 1; $j <= 30; ++$j) { $key = getRandString($j); $key = "*$key*"; $url = "curl -XGET 'http://localhost:9200/ugc/1/_search?q=name:$key'";//真正run的时候,不是本机测试,请注意 $time = microtime(true); $ret = shell_exec($url); $rets = json_decode($ret, true); $count = count($rets); $timelast = microtime(true) - $time; print_r($key . "\t" . $count . "\t" . $timelast . "\n"); } } $l = time() - $b1; print_r("total time " . $l . PHP_EOL); $t = microtime(true) - $b; print_r("total microtime " . $t . PHP_EOL); }
总耗时195s,3000次请求,平均耗时0.065s。真实测试的时候,是在位于同一个机房的两台机器上做的。而业务之前用的mongodb+regex的方式,接口请求耗时均在1s以上,具体数据就不给出了。
下面给出es查询在不同字符长度下,平均耗时结果:
length | times | avg(s) |
---|---|---|
1 | 100 | 0.0817 |
2 | 100 | 0.0654 |
3 | 100 | 0.0612 |
10 | 100 | 0.0606 |
20 | 100 | 0.0630 |
30 | 100 | 0.0666 |
结论
从上面的数据不难看出,要使用合适的工具做合适的事情。es在文本检索方面的应用已经很成熟了。其他高级特性还要在应用中继续熟悉。相关文章推荐
- Java IO与NIO的一些文件拷贝测试
- 推荐六款WEB上传组件性能测试与比较第1/10页
- C#代码性能测试类(简单实用)
- 巧用mysql提示符prompt清晰管理数据库的方法
- asp 性能测试报告 学习asp朋友需要了解的东西
- 使用console进行性能测试
- 两大步骤教您开启MySQL 数据库远程登陆帐号的方法
- phpmyadmin 4+ 访问慢的解决方法
- linux系统下实现mysql热备份详细步骤(mysql主从复制)
- CentOS 5.5下安装MySQL 5.5全过程分享
- MySQL复制的概述、安装、故障、技巧、工具(火丁分享)
- MySQL中删除重复数据的简单方法
- 1亿条记录的MongoDB数据库随机查询性能测试
- eval的两组性能测试数据
- Java常用排序算法及性能测试集合
- Java中的StringBuilder性能测试
- Java中Map的遍历方法及性能测试
- python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
- 使用ElasticSearch+LogStash+Kibana+Redis搭建日志管理服务
- nginx 和apache 性能测试对比