zoukankan      html  css  js  c++  java
  • 23.partial update

    主要知识点

       

    1、什么是partial update(部分修改)

    2partial update的语法

    3、在es内部partial update的实现过程

    4、partial update优点

       

    一、PUT /index/type/id

    这种语法会创建文档或者全量替换文档,一般对应到应用程序中,每次的执行流程基本是这样的:

       

    1)应用程序先发起一个get请求,获取到document,展示到前台界面,供用户查看和修改

    2)用户在前台界面修改数据,发送到后台

    3)后台代码,会将用户修改的数据在内存中进行执行,然后封装好修改后的全量数据

    4)然后发送PUT请求,到es中,进行全量替换

    5es将老的document标记为deleted,然后重新创建一个新的document

       

    二、partial update语法

    语法:

    post /index/type/id/_update

    {

    "doc": {

    "要修改的少数几个field即可,不需要全量的数据"

    }

    }

    这样就方便了许多,每次就传递少数要发生修改的field即可,不需要将全量的document数据发送过去。

       

    三、partial update实现过程

    用户直接修改field,然后发送给应用程序,由应用程序直接发送给ES,和全量替换相比,全量替换要先去es进行查找,把查找的数据返回给应用程序,然后再次返回给用户界面,只有这样用户才知道要替换什么,partial update少了先查找的这一步。在es内部,由es先把原来旧的数据查找出来,partial update的数据更新到这份数据中,然后把原来旧的数据标记为deleted,把新的数据进行替换。由此可以看出,用户是用的partial update,但是在ES内部,仍然是全量替换。

    四、partial update优点:

    1、所有的查询、修改、写回都发生在一个shard内部,避免了所有的网络数据传输的开销,和全量替换相比减少两次网络请求:1.es把查询出来的原数据传递给应用程序的网络请求,2.应用程序又把原数据传递用给用户界面的网络请求,这样就大大提升了性能。

    2、减少查询和修改的时间间隔,从而减少了并发冲突。

       

    五、partial update实例

    1、先增加一条数据

    PUT /test_index/test_type/10

    {

    "test_field1": "test1",

    "test_field2": "test2"

    }

    2、进行partial update

    POST /test_index/test_type/10/_update

    {

    "doc": {

    "test_field2": "updated test2"

    }

    }

    这样就只是修改了"test_field2""test_field1"的值不会被改变。

  • 相关阅读:
    COJ 1691:前缀和
    COJ 1692:模拟
    POJ 3415:后缀数组+单调栈优化
    python拓展知识
    git总结
    好的文章及博客收集
    python爬虫总结
    ajax与java后台交互
    Java多线程与并发库
    Django框架创建
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8463479.html
Copyright © 2011-2022 走看看