首页 > 其他分享 >es写入数据流程

es写入数据流程

时间:2024-02-08 20:00:29浏览次数:25  
标签:translog segment 流程 写入 buffer 数据 es OSCache

数据写入前的查询定位阶段

写入数据之前是通过协调节点找到应该存放数据的数据分片的主分片的节点。然后就就是ES数据吸入流程。

内存,OSCache,磁盘,这是数据存放的位置。

数据写入第一阶段写入内存

最开始一个写入请求进来,直接写入内存中的buffer,这样做是为了速度。这时候这份写入数据还不能被查询到。与数据写入buffer并行的是数据写入translog,这是为了提高数据的可靠性。如果这时候buffer里面的数据丢了,translog的数据可以恢复。

  • translog的数据写入的是流水账结构简单速度快。它可以每次记录流水都刷盘,保证数据不丢,但是默认配置是5秒刷盘一次,这样可以提高效率。
  • translog和主流程的区别类似一个银行有两个记账员,主记账员记的总账,比如记录每个用户账号里面还有多少钱,每次要和之前数据比对汇总,次记账员只记录用户干了什么。所以次记账员比较轻松,可以记更加快。如果主记账员的当月账本丢了,次记账员哪里每天做的流水还能恢复主账本。

数据写入第二阶段写入OSCache(refresh)

buffer里面的内容每隔1秒钟就生成一个segment,然后es把segment写入OSCache。OSCache是操作系统管理的,也在内存中,如果计算机正常关闭,操作系统会让、完成OSCache落盘才关机,如果异常关闭OSCache 数据就会丢失。写入OSCache的数据已经可给操作系统了,已经可以读取到了。es每秒生成一个segment,所以es写入到能够读取到数据之间的延时理论最多1秒。

数据写入第三阶段写入磁盘(flush)

OSCache里面的数据并是不可靠的,如果数据丢失,可以通过translog来恢复。前面说了,写入buffer的时候同时在translog里面做了记录,所以translog里面有全部的 位于OSCache中的segment的内容。重放translog就能得到这部分数据。

translog并不能让它无限增长,所以当translog达到一定尺寸,或者一定时间(30分钟),就可以清空一下translog。translog的内容=buffer+OSCache segment。

  • 第一步,把buffer里面的内容refresh成一个新的segment。
  • 第二步,把OSCache里面的segment合并,并且刷盘,一起刷入磁盘的还有几号以后得segment是已经刷盘了(commit point)。
  • 第3步清空translog。

ES写入流程示意图

image-20240208160500504

标签:translog,segment,流程,写入,buffer,数据,es,OSCache
From: https://www.cnblogs.com/cxygg/p/18012082

相关文章

  • Codeforces Round 923 (Div. 3)赛后总结
    CodeforcesRound923(Div.3)A没什么好说的,纯秒。B一开始不知道怎么做,后面用了一个比较麻烦复杂的思路,可以做,但是开数时漏了数组0下标,导致样例一部分一直是空的。C非常简单的一道题,判断条件也比较好找,但是再提醒一遍自己,数组开大点,应该数组开小了,导致样例8没过真的气,最后......
  • Codeforces Round 260 (Div. 1)A. Boredom(dp)
    最开始写了一发贪心wa了,然后这种选和不选的组合优化问题,一般是考虑动态规划\(dp[i][0]:\)表示第i个数不选的最大值\(dp[i][1]:\)表示第i个数选的最大值考虑转移:\(dp[i][0]=max(dp[i-1][1],dp[i-1][0])\)\(dp[i][1]=dp[i-1][1]+a[i]*i\)需要将每一个数用一个桶统计次数因......
  • Codeforces Round 923 (Div. 3)
    A.MakeitWhiteA题不多说B.FollowingtheString题目一开始没看懂,后面发现数字是指字母出现的次数,读懂题目后就好做了,先把26个字母放在一个数组里全部初始化为0,然后用1次就加1,然后要根据数字来选数的话就可以遍历数组当满足就break;也可以通过集合。C.ChoosetheDifferent......
  • pytest断言和取值
    进行一个断言:importrequestsdeftest_mobile():params={"shouji":"18989490942","appkey":"0c818521d38759e1"}r=requests.post('https://api.binstd.com/shouji/query',params=p......
  • Codeforces Round 909 (Div. 3)
    题目链接A.若n是3的倍数,那么输出第二,因为不管先手如何操作,后手只要跟先手出的相反那么先手就永远不会赢其他情况,先手都能赢#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+10;voidsolve(){intn;cin>>n;if((n+1)%3==0|......
  • nginx里alias,root,try_files笔记
    先说结果:try_files一共有三个值$uri,$uri//index.html,前两个值取决于alias,最后一个值和alias无关,取决于root,即如果最后一个值/index.html,则实际地址是root/index.html,不是alias/index.html,和alias一点关系没有,还有root,alias可以说不是一个东西,root中文意思根路径,限定......
  • PTES(Penetration Testing Execution Standard ,渗透测试执行标准)
    PTES是一种渗透测试标准,旨在提供一种通用语言描述的渗透测试执行范围和标准,始于2009年初,由一些创始成员围绕渗透测试行业讨论所得,参与者可以查看此列表。 其内容由7个主要部分组成,但该标准实际上并没有提供关于执行实际渗透测试的技术要求,但有一份相关的实践技术指南:http://ww......
  • How to evaluate the Messi Hong Kong fraud incident?
    WhoisLionelMessi?URL:https://en.wikipedia.org/wiki/Lionel_MessiAsafamousfootballplayer,Messiplaysacrucialroleinsociety,andhisconductshouldadheretobothmoralandlegalstandards.Fraudulentbehaviornotonlytarnisheshispe......
  • form里面有多个对象,对象里面的每一项都是formItem,rules应该怎么配置
    <template><el-form:model="formData":rules="formRules"ref="form"label-width="100px"><el-form-itemlabel="对象1"><el-inputv-model="formData.object1.prop1"pla......
  • 使用 Kestrel 自托管https 并作为 Windows 服务启动 Blazor 提示: 无法配置 HTTPS 端
    原文链接https://stackoverflow.com/questions/53300480/unable-to-configure-https-endpoint-no-server-certificate-was-specified-and-the/71026252#71026252使用Kestrel自托管并作为Windows服务启动Blazor提示UnabletoconfigureHTTPSendpoint.Noservercertifi......