zoukankan      html  css  js  c++  java
  • es之批量提交操作

    1:批量查询操作

    1):插入测试数据

    PUT /costumer/doc/1
    {
    "name": "zhangsan",
    "age": 20
    }


    PUT /costumer/doc/2
    {
    "name": "lisi",
    "age": 19
    }

    PUT /costumer/doc/3
    {
    "name": "wangwu",
    "age": 18
    }

    Elasticsearch是分布式的,在查询的时候不可避免的要夸网络,如果大量的单独的请求,会造成很大的网络延迟和开销;

    ES的查询方式:

    2):批量查询

    GET /_mget
    {
    "docs": [
        {
          "_index": "costumer",
          "_type": "doc",
          "_id": "1"
        },
        {
          "_index": "costumer",
          "_type": "doc",
          "_id": "2"
        }
      ]
    }

    如果索引相同的话,可以简写:

    如果类型也相同的话,可以直接简写成:

    2:批量执行(bulk)

    与 mget 可以使我们一次取回多个文档同样的方式, bulk API 允许在单个步骤中可以进行多次 create 、 index 、 update 或 delete 请求。 如果你需要索引一个数据流比如日志事件,它可以排队和索引数百或数千批次

    【注意:】bulk操作是非原子性的,不可以用在事物上

    语法:bulk 与其他的请求体格式稍有不同,如下所示:

    { action: { metadata }}
    
    { request body       }

    action/metadata 行指定 哪一个文档 做 什么操作 。

    action 必须是以下选项之一:

    create如果文档不存在,那么就创建它。
    index 创建一个新文档或者替换一个现有的文档。
    update 部分更新一个文档
    delete 删除一个文档

    例如,为了把所有的操作组合在一起,一个完整的 bulk 请求 有以下形式:

    POST /_bulk
    { "delete": { "_index": "website", "_type": "blog", "_id": "123" }}
    { "create": { "_index": "website", "_type": "blog", "_id": "123" }}
    { "title":    "My first blog post" }
    { "index": { "_index": "website", "_type": "blog" }}
    { "title":    "My second blog post" }
    { "update": { "_index": "website", "_type": "blog", "_id": "123", "_retry_on_conflict" : 3} }
    { "doc" : {"title" : "My updated blog post"} }

    【注意】:

    1、请注意 delete 动作不能有请求体,它后面跟着的是另外一个操作

    2、谨记最后一个换行符不要落下。

    3、每个子请求都是独立执行,因此某个子请求的失败不会对其他子请求的成功与否造成影响。

     

    整个批量请求都需要由接收到请求的节点加载到内存中,因此该请求越大,其他请求所能获得的内存就越少。 批量请求的大小有一个最佳值,大于这个值,性能将不再提升,甚至会下降。 但是最佳值不是一个固定的值。它完全取决于硬件、文档的大小和复杂度、索引和搜索的负载的整体情况。

    幸运的是,很容易找到这个 最佳点 :通过批量索引典型文档,并不断增加批量大小进行尝试。 当性能开始下降,那么你的批量大小就太大了。一个好的办法是开始时将 1,000 到 5,000 个文档作为一个批次, 如果你的文档非常大,那么就减少批量的文档个数。

    密切关注你的批量请求的物理大小往往非常有用,一千个 1KB 的文档是完全不同于一千个 1MB 文档所占的物理大小。 一个好的批量大小在开始处理后所占用的物理大小约为 **5-15 MB. es的内存分配是32G

  • 相关阅读:
    LeetCode 189. Rotate Array
    LeetCode 965. Univalued Binary Tree
    LeetCode 111. Minimum Depth of Binary Tree
    LeetCode 104. Maximum Depth of Binary Tree
    Windows下MySQL的安装与配置
    LeetCode 58. Length of Last Word
    LeetCode 41. First Missing Positive
    LeetCode 283. Move Zeroes
    《蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践》读后感
    删除docker下的镜像
  • 原文地址:https://www.cnblogs.com/niutao/p/10909059.html
Copyright © 2011-2022 走看看