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

  • 相关阅读:
    browser浏览器类型判断
    泛型函数Func<>
    前台JS端排除重复录入数据方法(取值对比)
    判断字符串是否为空字符串
    Linq语法及用法
    new Array( ) 使用
    性能测试
    [排序N大件之]快速排序
    [排序N大件之]归并排序
    [排序N大件之]谢尔排序
  • 原文地址:https://www.cnblogs.com/niutao/p/10909059.html
Copyright © 2011-2022 走看看