performance - Elasticsearch Spring Data 和 Elasticsearch HighLevelClient 复杂聚合的性能

标签 performance elasticsearch spring-data-elasticsearch elasticsearch-high-level-restclient

我试图找到比较 Elasticsearch Spring Data 性能的基准使用 Elasticsearch HighLevelClient在我创建一个之前,用于具有复杂嵌套聚合的搜索查询。

但我唯一发现的是,如果你需要 CRUD 操作,使用 spring data 和其他一些功能作为自动配置会更容易。但它们都与性能无关。

我想知道你们中是否有人使用过两者并测试过它们的性能?是否有任何技术原因导致其中一个在此类查询中速度更快?

最佳答案

这里最重要的部分是确保您获得正确的基础查询。我们最近遇到过一个案例,错误的设置使我们的性能损失了近 10 倍。 Spring Data 使用高级 Rest 客户端,因此我通常期望没有开销或开销很小;如果基础查询相同。框架差异可能足够小,我会优先考虑开发速度和熟悉程度。

Our mistake是返回聚合中的底层文档,这需要发送更多数据/(反)序列化,并且也不会使用缓存 - 这对我们的聚合产生了 400 毫秒与 40 毫秒的差异(当我们命中缓存时) )。

编辑 P.J.Meisch(希望您不介意@xeraa),不需要额外的答案:

如前所述,Spring Data Elasticsearch 使用 Elasticsearch RestHighLevelClient(稍后将使用新的 Elasticsearch 客户端),并且要创建聚合查询,您需要使用 NativeSearchQuery,您可以在其中使用 Elasticsearch 构建查询查询构建器。因此,直接使用 RestHighLevelClient 构建查询是相同的。

正如 @xeraa 已经提到的,如果您只需要聚合而不是查询数据,请确保不要返回源文档,在 Spring Data Elasticsearch 中,您可以使用 NativeSearchQueryBuilder.withMaxResults(0)。然后,您可以照常将查询传递给 ElasticsearchOperations.search() 方法。

Spring Data Elasticsearch 不会对返回的聚合进行任何解析,您必须在那里执行与直接使用客户端相同的操作。

所以我不认为 Spring Data Elasticsearch 会导致性能问题。

关于performance - Elasticsearch Spring Data 和 Elasticsearch HighLevelClient 复杂聚合的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70547677/

相关文章:

c++ - 哪个更快? "vector of structs"还是 "a number of vectors"?

elasticsearch - logstash kv 过滤器,使用动态映射将字符串转换为整数

php - Composer 安装错误 "Could not parse URElasticsearch\Common\Exceptions\InvalidArgumentException : Could not parse URII"

spring-data-elasticsearch - 有没有办法在 ElasticsearchRepository 中使用规范?

c++ - 使用 2 个线程的代码运行速度比使用 1 个线程慢 6 倍

c++ - DrawText 在 Win7 x64 上的性能不佳

spring-boot - 属性引用异常 : No property findAll found for type

spring - 索引排序Elasticsearch

C# 如何使用 LINQ 将列表一分为二

elasticsearch - 'exists'可以用来检测ElasticSearch中的空字符串吗?