首页 > 其他分享 >33_分布式文档系统_bulk api的奇特json格式与底层性能优化关系大揭秘

33_分布式文档系统_bulk api的奇特json格式与底层性能优化关系大揭秘

时间:2024-10-01 19:44:20浏览次数:10  
标签:请求 33 bulk json meta 内存 action

课程大纲

bulk api奇特的json格式

{"action": {"meta"}}\n
{"data"}\n
{"action": {"meta"}}\n
{"data"}\n

[{
"action": {

},
"data": {

}
}]

1、bulk中的每个操作都可能要转发到不同的node的shard去执行

2、如果采用比较良好的json数组格式

允许任意的换行,整个可读性非常棒,读起来很爽,es拿到那种标准格式的json串以后,要按照下述流程去进行处理

(1)将json数组解析为JSONArray对象,这个时候,整个数据,就会在内存中出现一份一模一样的拷贝,一份数据是json文本,一份数据是JSONArray对象
(2)解析json数组里的每个json,对每个请求中的document进行路由
(3)为路由到同一个shard上的多个请求,创建一个请求数组
(4)将这个请求数组序列化
(5)将序列化后的请求数组发送到对应的节点上去

3、耗费更多内存,更多的jvm gc开销

我们之前提到过bulk size最佳大小的那个问题,一般建议说在几千条那样,然后大小在10MB左右,所以说,可怕的事情来了。假设说现在100个bulk请求发送到了一个节点上去,然后每个请求是10MB,100个请求,就是1000MB = 1GB,然后每个请求的json都copy一份为jsonarray对象,此时内存中的占用就会翻倍,就会占用2GB的内存,甚至还不止。因为弄成jsonarray之后,还可能会多搞一些其他的数据结构,2GB+的内存占用。

占用更多的内存可能就会积压其他请求的内存使用量,比如说最重要的搜索请求,分析请求,等等,此时就可能会导致其他请求的性能急速下降
另外的话,占用内存更多,就会导致java虚拟机的垃圾回收次数更多,跟频繁,每次要回收的垃圾对象更多,耗费的时间更多,导致es的java虚拟机停止工作线程的时间更多

4、现在的奇特格式

{"action": {"meta"}}\n
{"data"}\n
{"action": {"meta"}}\n
{"data"}\n

(1)不用将其转换为json对象,不会出现内存中的相同数据的拷贝,直接按照换行符切割json
(2)对每两个一组的json,读取meta,进行document路由
(3)直接将对应的json发送到node上去

5、最大的优势在于,不需要将json数组解析为一个JSONArray对象,形成一份大数据的拷贝,浪费内存空间,尽可能地保证性能

标签:请求,33,bulk,json,meta,内存,action
From: https://www.cnblogs.com/siben/p/18443161

相关文章

  • P3369 【模板】普通平衡树
    直接抄WIDA的pbds板子#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>usingnamespace__gnu_pbds;usingnamespacestd;typedefpair<int,int>V;tree<V,null_type,less<V>,rb_tree_tag,tree_order_statistics_node_updat......
  • leetcode刷题day33|动态规划Part02(62.不同路径、63. 不同路径 II、 343.整数拆分、96.
    62.不同路径机器人从(0,0)位置出发,到(m-1,n-1)终点。动规五部曲1、确定dp数组(dptable)以及下标的含义dp[i][j]:表示从(0,0)出发,到(i,j)有dp[i][j]条不同的路径。2、确定递推公式想要求dp[i][j],只能有两个方向来推导出来,即dp[i-1][j]和dp[i][j-1]。dp[i]......
  • COMM 337 Python code in your notebook
    COMM337:Homework2DUEDATE:Oct2,202412:00pmThisisHW2Pythonassignment.Thereare13problems.Eachproblemis7pointsandthetotalis100points(9forfollowingfile/printformat).Instructions:Latesubmissionswillnotbeaccepted.Submit......
  • MyBatis-plus 3.5之前版本 处理存储json数据
    MyBatis-plus3.6之后支持集合泛型,不需要自定义TypeHandler当前使用的是MyBatis-plus3.5.2版本一:如果是支持对象,直接用MP内置的Handler,JacksonTypeHandler或FastjsonTypeHandler@TableField(typeHandler=FastjsonTypeHandler.class)//@TableField(typeHandler=JacksonTypeHa......
  • 八字五行强弱喜用神测算api免费接口_json数据格式_可计算五行打分强弱
    八字以木、火、土、金、水去分析其旺弱,而分析之法以月令地支最为有力,其次为时支,再次为日支,最弱为年支,而天干必须见地支有同类或有生自己的五行才有用,因为只有天干一个单独的五行,其力会弱至无用。这个接口是免费的,通过get方式获取数据,数据格式json。接口名称:八字五行强弱测算api免......
  • 3319 哈夫曼树 优先队列 最小堆
    #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e3+10,inf=0x3f3f3f3f;//优先队列(最小堆),用于存储叶结点的权值priority_queue<int,vector<int>,greater<int>>q;intn,ans,x;intmain(){//读取叶结点的数量......
  • leetcode133. 克隆图
    给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int)和其邻居的列表(list[Node])。classNode{publicintval;publicList<Node>neighbors;}测试用例格式:简单起见,每个节点的值都和它的索引相同。例如,第一个......
  • 【0335】Postgres内核之 auxiliary process(辅助进程)获取 PGPROC latch 所有权 (3)
    1.获取PGPROClatch所有权在【0333】Postgres内核之auxiliaryprocess(辅助进程)创建PGPROC一文中讲解了Auxiliaryprocess获取PGPROC的底层实现过程。在此基础上,本文将基于Postgres内核讲解获取该辅助进程latch所有权的源码实现。1.1latch关联PGPROC获取P......
  • 高点摄像山火烟雾检测数据集 共2890张图像,分辨率1920×1080,标注采用json格式,标注了每
    高点摄像山火烟雾检测数据集(并按照低、中详细标注烟雾浓度)。主要针对初期山火,任何野火检测系统的最重要目标是在火势扩大之前及时检测到火灾。在初期阶段,野火由非火焰性的燃烧烟雾组成,热量相对较低。在这个阶段识别火灾能够提供最佳的抑制机会。在这个阶段通常看不到火焰;因此,任......
  • 【0333】Postgres内核之 auxiliary process(辅助进程)创建 PGPROC
    1.auxiliaryprocess当我们是辅助进程(auxiliaryprocess)时,不会进行完整的InitPostgres初始化操作,但即使在辅助进程中,也有几件事需要被启动。这里第一件就是“创建一个PGPROC,以便我们能够使用LWLocks。在EXEC_BACKEND情形下,这一操作已由SubPostmasterMain()完......