ElasticSearch可预期的表现

时间:2012-02-23 15:34:47

标签: performance elasticsearch database-performance

我正在努力将搜索引擎从sql数据库移植到elasticsearch。 这样做的主要原因是能够轻松地计算构面。

目前我们通过生成预分类表在sql上有方面。它运行良好,但维护很痛苦,只有数据的一个子集支持facet。

现在ES原型正在运行,我正在对这两个解决方案进行基准测试,看起来ES版本在性能方面略逊于sql版本(就可维护性而言,它要好得多)。

我使用了完全相同的机器配置,64位平台,32 GB内存,一个ssd磁盘和一个3 GHz的四核Intel Xeon来比较sql和ES。

文档不小,大约有200个字段,具体取决于请求,使用基于脚本的排序,并且总是在doc的8个字段上计算facets。

索引包含3百万个文档,如果我没弄错的话,它与ES可以处理的相对较小。

在查询方面,我使用过滤查询,对于某些请求,我使用custom_filters_score查询来计算得分并将其用于排序。

由于方面的影响,某些过滤器是全局的,但过滤后的查询中总会有一些过滤器,因此应减少扫描的文档数量(并非所有索引都被扫描)。

我在测试中使用了两个度量:服务器执行搜索所花费的时间,以及并行执行100个线程的客户端执行的查询数量。

对于elasticsearch,每个查询在服务器上花费的平均时间约为500毫秒(并行100个查询),客户端上的平均查询时间约为160(构建查询时会丢失一些ms,发送,接收结果和解析它们。 这是一个具有1个分片和0个副本的索引,当我增加分片/副本的数量时,性能会显着下降。

对于sql,执行查询所花费的平均时间大约为360毫秒(同上,并行运行100个查询),客户端上的平均查询大约为200秒。

我知道很难比较,但由于我对预期的结果一无所知,我想知道是否有人可以评论这些措施。

也许我错过了一些东西,它应该快一个数量级,或者这些是类似环境的典型结果,我不知道。

在我的案例中,我能期待什么? 您在ES的类似情况下观察到了什么? 它是否支持并发请求? 在同时进行100次查询时,执行查询的时间是否应该在500毫秒的范围内? 有没有办法提高搜索性能?

欢迎任何信息或评论,这是决定是否将原型工业化的重要部分。

谢谢。

2 个答案:

答案 0 :(得分:0)

这不是一个问题;这听起来更像是一场讨论。

尽管如此,没有多少人可以评论,因为我们所有的用例都不同。您纯粹将其用作分面分析工具。我使用ElasticSearch作为数据库和实时分析工具。所以我对你有用的基准将与你截然不同。

版本明智,我仍然使用1.8.7(因为Logstash),但是在撰写本文时当前版本为0.19.4。甚至谈论标准基准测试还有太多不同的参数,因为弹性搜索并不是人们今天使用的标准工业工具,所以我想你需要重新提出你要求的内容,以便人们真正发表评论。

答案 1 :(得分:0)

很难给你一个确切的答案,但你的数字听起来并不太意外。

  • 确保您已使用段数= 1优化索引。
  • 在弹性搜索中调高线程池大小。
  • 确保Xms和Xmx相同,使用mock lock all。

这些应该会给你带来一些性能上的提升虽然我并不感到惊讶的是,只有300万个文档的高性能关系数据库表现同样好或更好,不同之处在于DB会变慢,而ES会执行相同的百万分之百。