您的位置:首页 > 其它

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查询在不同字符长度下,平均耗时结果:

lengthtimesavg(s)
11000.0817
21000.0654
31000.0612
101000.0606
201000.0630
301000.0666

结论

从上面的数据不难看出,要使用合适的工具做合适的事情。es在文本检索方面的应用已经很成熟了。其他高级特性还要在应用中继续熟悉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息