opensearch 中两种更新类型的性能差异

问题描述 投票:0回答:1

opensearch 允许我们以两种方式更新给定文档。

  1. PUT index/_doc/1(替换整个文档)
  2. POST index/_update/1(允许部分更新)

我进行了测试来观察单个文档的并发更新。有趣的是,PUT 请求始终成功,而 POST 请求会触发 version_conflict_engine_exception。尽管此异常是预料之中的,但它引发了有关更新 API 中潜在的额外开销的问题。不幸的是,我找不到相关信息。您能建议哪种方法在执行性能方面表现更好吗?

performance opensearch
1个回答
0
投票

索引API 此操作对结果进行索引

PUT index/_doc/1

使用索引 API 更新文档时,即使文档未更改,也始终会创建文档的新版本。

_更新API

POST index/_update/1 

此操作:

  1. 从索引中获取文档(与分片并置)。
  2. 运行指定的脚本。
  3. 对结果建立索引。

因此,由于 Index API 需要的操作少于 Update API 调用,因此 Index API

PUT index/_doc/1
的性能将优于 Update API
POST index/_update/1


关于版本冲突异常:

索引操作可以是有条件的,并且仅当对文档的最后一次修改分配了由 if_seq_no 和 if_primary_term 参数指定的序列号和主要术语时才执行。如果检测到不匹配,操作将导致 VersionConflictException 和状态代码 409。有关更多详细信息,请参阅乐观并发控制

使用索引 API 更新文档时,即使文档未更改,也始终会创建文档的新版本。如果这是不可接受的,请使用 _update API,并将 detector_noop 设置为 true。此选项在索引 API 上不可用,因为索引 API 不会获取旧源,也无法将其与新源进行比较。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html#index-noop

© www.soinside.com 2019 - 2024. All rights reserved.