es之7:elastic search partial update

PUT /index/type/id,创建文档&替换文档,就是一样的语法

1、查询更新全量方式

一般对应到应用程序中,每次的执行流程基本是这样的:
(1)应用程序先发起一个get请求,获取到document,展示到前台界面,供用户查看和修改
(2)用户在前台界面修改数据,发送到后台
(3)后台代码,会将用户修改的数据在内存中进行执行,然后封装好修改后的全量数据
(4)然后发送PUT请求,到es中,进行全量替换
(5)es将老的document标记为deleted,然后重新创建一个新的document
过程如下图:

2、partial update方式

POST /index/type/id/_update
{
“doc”: {
“要修改的少数几个field即可,不需要全量的数据”
}
}
PUT /test_index/test_type/10
{
“test_field1”: “test1”,
“test_field2”: “test2”
}
POST /test_index/test_type/10/_update
{
“doc”: {
“test_field2”: “updated test2”
}
}
看起来,好像就比较方便了,每次就传递少数几个发生修改的field即可,不需要将全量的document数据发送过去

partial update直接将数据更新到document中就完成了修改,不用事先先发起一个GET请求数据进行修改然后在将修改后的数据发回去。

es内部:partial update的执行和全量替换一致。

(1)内部先get获取document

(2)将更新的field更新到document的json中

(3)将老的document标记为deleted

(4)创建新的document

优点:

(1)所有查询,修改和写回操作均发生在同一个shard内,避免了不必要的网络数据传输带来的开销(应用层实现的话,先查询,在java内存修改部分字段,再写回全量数据),大大提升了性能(减少了两次请求,一次GET请求,一次回写请求)

(2)减少修改和查询中的时间间隔(用户等待或者应用层耗时),partial update 在shard内部耗时毫秒级别。有效减少并发冲突的情况

(3)内置乐观锁并发控制

POST /test_index/test_type/id/_update?retry_on_conflict=2

Original: https://www.cnblogs.com/duanxz/p/15913209.html
Author: duanxz
Title: es之7:elastic search partial update

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/545932/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球