• ES学习(八)


    一、bulk操作

      A. 语法

        POST _bulk

        {"action","metadata"}

        {"data"}

        注意:一个json串一行,不能换行

      B、bulk size最佳大小

        bulk request会加载到内存里,如果太大的话,性能反而会下降,因此需要反复尝试一个最佳bulk size。一般从1000-5000条数据开始,尝试逐渐增加。另外,如果看大小的话,最好在5-15M之间

    二、数据路由原理

      A、路由算法

        shard=hash(routing) % number_of_primary_shards

      B、默认的routing就是id,也可以在发送请求时手动指定一个routing value

      C、过程

        1. 客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)

        2. coordinating node,对document进行路由,将请求转发给对应的node(有primary shard)

        3. 实际的node上primary shard处理请求,然后将数据同步到replica shard

        4. coordinating node,如果发现primary shard和所有的replica shard都搞定后,就返回响应结果给客户端

    三、写一致性

      A、我们发送一个增删改操作的时候,都可以带上一个consistency参数,指明我们想要的写一致性是什么? put /index/_doc/id?constency=quorum

        1. one: 只要有一个primary shard 是active就可以执行

        2. all:要求所有的primary shard和replica shard都是active才可以执行

        3. quorum:要求大部分的shard都是活跃的才可以执行

      B、特殊:只有当number_of_replicas>1时才生效

      C、quorum不齐的时候,等待一分钟(默认)超时,可以指定超时时间 ....?timeout=30s(默认毫秒)

    四、bulk处理步骤

      A、如果不写成奇特的格式步骤

        1. 将json数组解析成jsonArray对象,这个时候,整个数据,就会在内存中出现一份一模一样的拷贝,一份数据是json文本,一份数据是jsonArray对象

        2、解析json数组里的每个json,对每个请求中的document进行路由

        3、为路由到一个shard上的多个请求创建一个请求数组

        4、将请求数组序列化

        5、将序列化好的请求数组发送刀对应的节点上去

        bulk大小控制在10M左右,太大的话,处理时候内存使用量翻倍且更多,会占用其它更重要请求的内存。另外,占用内存更多就会导致java虚拟机的垃圾回收次数更多更频繁,耗费时间更多,导致es的java虚拟机停止工作线程的时间更长。

      B、奇特格式

        1. 不用将其转换成json对象,不会出现内存中相同数据的拷贝,直接按照换行符切割json

        2. 对每两个一组的json,读取meta,进行document路由

        3. 直接将对应的json发送到node上去

    五、timeout机制

      A、默认没有timeout,请求可以手动指定

    六、multi index搜索

      A、/_search:所有索引

      B、/index/_search:指定索引

      C、/index1,index2/_search:同时搜索index1和index2

      D、/*1,*2/_search: 按照通配符搜索多个索引

    七、deep paging问题

      如果有60000条数据,有3个primary shard,每个shard有20000条,要取10001-10010数据,则每个shard要拿10010条数据出来给coordinating node,总共30030条数据,然后排序,取出10001-10010数据。

      搜索过深的时候,就需要在coordinating node上保存大量数据,还要进行大量数据的排序,再取出对应的那一页,这个过程即耗费网络带宽,耗费内存,耗费cpu,应该尽量避免

  • 相关阅读:
    Git 简易手册
    【Swift】UILabel 设置内边距
    【iOS】屏幕适配之NSLayoutConstraint
    【Swift】TTTAttributedLabel使用小记
    【iOS】Alamofire库在iOS7下设置Head无效的问题
    【iOS】在Swift中使用JSONModel
    【读书笔记】100个Switf必备tips
    【读书笔记】长尾理论
    【读书笔记】结网
    嗯,农民伯伯的2014就是这些
  • 原文地址:https://www.cnblogs.com/DjanFey/p/12120123.html
Copyright © 2020-2023  润新知