码迷,mamicode.com
首页 > Web开发 > 详细

7.1 为什么bulk使用奇特的json格式?

时间:2019-06-16 21:35:37      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:而且   数据   字符串   格式   upd   color   使用   重复   要求   

回顾:
bulk的语法要求:每个json串都不能换行,不同json串之间,必须换行
 
为什么不用标准json数组呢?如:
[
    {
        "create":{...}
    },
    {
        "update":{...}s
    }
]
 
因为,如果使用这种Json数组,ES需要做的是
  1. 把字符串转成 Json数组对象
  2. 按每个Json所指定的index、type、id,路由到对应shard上
  3. 在shard上分别执行对应操作
可以看到,首先,字符串转Json是个耗时的工作;其次,ES需要在内存中保存一份字符串、一份Json对象,是重复的数据。这样,当bulk内容大的时候,会导致ES占用不必要的内存,而会影响搜索、聚合请求速度,而且大量垃圾数据,会导致jvm的GC更多,占用更多时间
 
而,如果使用bulk规定的,每个json用一行的方式,
ES需要做的是:
  1. 切分请求字符串
  2. 取到命令类型(create、update)、index、type
  3. 直接把 每行字符串(或者每两行)发到对应shard上去,就完事了。
不会有内存浪费,和多余时间开销。
 
因此,这种语法,主要考虑的是ES的性能问题。值得借鉴
 

7.1 为什么bulk使用奇特的json格式?

标签:而且   数据   字符串   格式   upd   color   使用   重复   要求   

原文地址:https://www.cnblogs.com/cc299/p/11032813.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!