Doris中,Leader节点与非Leader节点和Observer节点之间的元数据高可用和一致性,是通过bdbje(全称:Oracle Berkeley DB Java Edition)的一致性和高可用实现的。

元数据与同步流程

元数据主要存储四类数据:

  1. 用户数据信息. 包括数据库, 表的schema, 分片信息等
  2. 各类作业信息. 如导入作业, clone作业, schemaChange作业等。
  3. 用户及权限信息.
  4. 集群及节点信息.

元数据同步图:

元数据流转如下:

  1. leader写入元数据

    写操作在修改leader的内存后,序列化为log,按照key-value格式写入到bdbje. 其中 key 为连续的整型数字,全局唯一、递增,作为 log id;value 即为序列化后的操作日志,由2部分组成。OperationType为操作类型,如建库操作、建表操作等。Writable Entity为序列化后的操作具体内容,通过反序列化该值,可以从镜像上回放元数据操作。

  2. 集群节点同步元数据

    日志写入bdbje后,bdbje会根据策略(写多数/全写), 将日志复制到FE其他的follower节点。FE节点通过对bdbje中元数据日志的reply, 修改自身的元数据内存镜像,完成与leader节点的元数据同步。

  3. 元数据checkpoint持久化

    leader 节点的日志条数达到阈值(默认 10w 条)并且满足checkpoint线程执行周期(默认六十秒)。checkpoint 会读取已有的 image 文件,和其之后的日志,重新在内存中回放出一份新的元数据镜像副本。然后将该副本写入到磁盘,形成一个新的 image。之所以是重新生成一份镜像副本,而不是将已有镜像写成 image,主要是考虑写 image 加读锁期间,会阻塞写操作。所以每次 checkpoint 会占用双倍内存空间。

  4. image 文件生成后,leader 节点会通知其他 non-leader 节点新的 image 已生成。non-leader 主动通过 http 拉取最新的 image 文件,来更换本地的旧文件.

  5. bdbje 中的日志,在 image 做完后,会定期删除旧的日志

  6. 删除旧的磁盘元数据镜像

总结

Leader节点修改内存元数据后,元数据日志首先写入bdbje,达到阈值后,bdbje形成一个新的DB,然后将新的DB内的日志,在旧的image上回放,生成一个新的image,然后删除bdbje中已经被集群节点全部同步的旧的元数据日志。这样周而复始。保证bdbje中的数据不会无限制得增长,也保证了image中始终保存着较新的元数据。同时,其他非leader节点,也访问bdbje,将bdbje中的新写入的元数据日志,在自己内存中的元数据上回放。

Doris的元数据存储是 memory -> bdbje -> checkpoint(image)。

为什么同时需要 bdbje 和 image 镜像呢?

  • 高性能和实时查询: bdbje 作为嵌入式数据库提供了高性能的元数据访问,适用于实时的查询和操作。它通常保存在内存中,可以快速地提供元数据信息。

  • 数据恢复和持久性: image 镜像则用于实现元数据的持久化,以便在系统重启或发生故障时,能够使用镜像还原元数据。这有助于确保系统的可靠性。

参考:

Apache Doris元数据管理

元数据设计文档

元数据运维

聊聊分布式 SQL 数据库Doris(二)的更多相关文章

  1. C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求

    C# 动态创建SQL数据库(二) 使用Entity Framework  创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...

  2. 分布式SQL数据库中部分索引的好处

    在优锐课的java学习分享中,探讨了分布式SQL数据库中部分索引的优势,并探讨了性能测试,结果等. 如果使用局部索引而不是常规索引,则在可为空的列上(其中只有一小部分行的该列不具有空值),然后可以大大 ...

  3. 保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!

    作者简介 Jimmy Guerrero,在开发者关系团队和开源社区拥有20多年的经验.他目前领导YugabyteDB的社区和市场团队. 本文来自Rancher Labs Longhorn是Kubern ...

  4. SQL数据库知识二(Day 25)

    又到了总结知识的时候了,今天主要把SQL数据库给简单的学完了,明天开始就要开始学ADO.NET的知识了.好了,话不多说,还是看一下今天都学了哪些内容. 1  字符串类型的知识点 --类型的使用 --截 ...

  5. C# 动态创建SQL数据库(二)

    使用Entity Framework  创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关系映射来创建数据库与表 一 新建项 ...

  6. SQL数据库基础二

  7. CockroachDB学习笔记——[译]The New Stack:遇见CockroachDB,一个弹性SQL数据库

    原文链接:https://www.cockroachlabs.com/blog/the-new-stack-meet-cockroachdb-the-resilient-sql-database/ 原 ...

  8. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  9. 【MS SQL】数据库维护计划之数据库备份(二)

    原文:[MS SQL]数据库维护计划之数据库备份(二) 上篇[MS SQL]数据库维护计划之数据库备份(一) 说了数据库备份的一些概念后,这篇以HRP_KQYY数据库备份为例,进行备份计划设置. 考虑 ...

  10. 数据库基础SQL知识面试题二

    数据库基础SQL知识面试题二 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.选课系统SQL语法练习 course数据库中有以下四张表: •students表(学生表): si ...

随机推荐

  1. 后缀数组C++详解

    后缀定义 "后缀i"代表以第i个字符开头的后缀,存储是用i代表字符串s的后缀s[i...n] 后缀数组是什么? 后缀数组(Suffix Array)主要关系到两个数组:sa 和 r ...

  2. vlak

    2023-7-14 题目 luogu题目传送门 题目描述 Nina 和 Emilija 正在玩一个特殊的游戏.这个游戏是在一张最开始为空白的纸上进行的.在每一个人的行动回合内,这个人会在这张纸上当前的 ...

  3. 【测试】自定义配置 RocksDB 进行 YCSB 测试

    目录 简介 编译 RocksDB 编译 YCSB 修复报错 自定义配置 RocksDB 进行 YCSB 测试 参考资料 本文主要记录在利用 YCSB 使用配置文件测试 RocksDB 的过程中遇到的一 ...

  4. vscode 中 Markdown 粘贴图片的位置

    背景 自从 typora 开始收费后, 不少人开始寻找其他的 Markdown编辑器, 我觉得 vscode 就是一个很不错的选择 虽然不能像 typora 在Markdown预览中编辑, 但是左右布 ...

  5. 这才叫 API 接口设计!

    API 接口设计 Token 设计 Token 是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 Token 便将此 Token 返回给客户端,以后客户端只需带上 ...

  6. 文心一言 VS 讯飞星火 VS chatgpt (85)-- 算法导论8.2 2题

    二.用go语言,试证明 COUNTING-SORT 是稳定的. 文心一言: 要证明 COUNTING-SORT 是稳定的,我们需要证明在排序过程中,具有相同值的元素在排序后仍保持其原始的相对顺序.CO ...

  7. QA|20221010|SecureCRT|我们5分钟前执行了a指令,但因为执行b指令打印了大量日志,把指令记录冲掉了,以后如何避免这种情况?

    Q:我们5分钟前执行了a指令,但因为执行b指令打印了大量日志,把指令记录冲掉了,以后如何避免这种情况? A:如下配置

  8. MQTT vs. XMPP,哪一个才是IoT通讯协议的正解

    MQTT vs. XMPP,哪一个才是IoT通讯协议的正解 这是个有趣的话题! 先来聊几个小故事. 关于我和MQTT 我在人生第一个IoT项目里,第一次接触到MQTT协议. 我很快就理解了这个协议.因 ...

  9. 使用“文心一言”编写技术博文《搭建企业知识库:基于 Wiki.js 的实践指南》

    百度于8月31日零点宣布,文心一言率先向全社会全面开放.我也是立即体验了下,感觉还不错.下面分享一下,如何使用"文心一言"写一篇技术博客. Step 01 生成文案主体 可以对文心 ...

  10. Vitess全局唯一ID生成的实现方案

    为了标识一段数据,通常我们会为其指定一个唯一id,比如利用MySQL数据库中的自增主键. 但是当数据量非常大时,仅靠数据库的自增主键是远远不够的,并且对于分布式数据库只依赖MySQL的自增id无法满足 ...