我试图找到比较 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/