《Zookeeper》源码分析(十八)之 ZKDatabase

news2025/2/23 22:57:10

目录

  • ZKDatabase
    • 1. 创建FileTxnSnapLog
      • 数据结构
      • 构造函数
    • 2. 创建ZKDatabase
      • 数据结构
      • 构造函数
    • 3. 加载日志数据
      • SnapLog.deserialize()
    • DataTree
      • deserialize()

ZKDatabase

在上一篇文章中提到ZKDatabase,它是zookeeper的内存数据库,负责管理会话、DataTree存储和事务日志。在zookeeper服务器启动的时候,它会将磁盘上的事务日志和快照数据文件恢复成一个完整的内存数据库;在zookeeper服务器运行期间,它会定时向磁盘dump快照数据。为此,在继续往下了解zookeeper之前我们需要先对它有所了解。
在这里插入图片描述

以上就是Zookeeper服务器启动时加载数据的过程,接下来具体分析第1/2/6步。

1. 创建FileTxnSnapLog

它是Zookeeper管理事务日志和快照日志的工具类

数据结构

在这里插入图片描述

构造函数

在这里插入图片描述

FileTxnSnapLog初始化过程主要做了两件事:

  1. 创建并清理事务日志和快照日志目录
  2. 创建事务日志和快照日志工具类

2. 创建ZKDatabase

数据结构

在这里插入图片描述

构造函数

在这里插入图片描述

3. 加载日志数据

完成内存数据库的初始化之后,zookeeper就可以开始从磁盘中恢复数据了:

  1. 首先从快照文件开始加载,如第1步
  2. 接着通过事务日志来更新增量数据,如第4步的fastForwardFromEdits()方法
    在这里插入图片描述

SnapLog.deserialize()

该方法详细介绍了zookeeper是如何读取快照文件的数据的:

  1. 首先根据文件名降序排列,获取排在前面的至多100个有效文件
  2. 对这些文件逐个进行反序列化,并将数据存放到dt和sessionsWithTimeouts中
    在这里插入图片描述

DataTree

DataTree是内存中的一份完整的数据,从前面的过程分析可知它是内存数据存储的核心,是一个树的数据结构,它的数据结构如下:
在这里插入图片描述

其中,DataNode是数据存储的最小单元,它包含了数据内容data、ACL列表acl、节点状态stat、子节点列表children。

deserialize()

在内存数据库进行初始化时调用该方法将文件中的数据反序列化成DataTree的数据
在这里插入图片描述

至此,ZKDatabase的初始化介绍到此为止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/916559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++信息学奥赛1839:【05NOIP提高组】谁拿了最多奖学金

这段代码是一个奖学金评选程序&#xff0c;根据学生的各项指标计算出最高奖学金金额和获得该奖学金的学生姓名。 具体解析如下&#xff1a; #include <iostream> #include <string> using namespace std;int main() {int n; // 定义整数变量n&#xff0c;用于存储…

实例042 在窗口间移动按扭

实例说明 窗体中每个可视控件都有所有者和父对象两个重要属性&#xff0c;所有者是控件建立时指定的所属对象&#xff0c;该对象可以是不可视控件&#xff0c;而父对象必须是可视控件。因此可以通过窗体中可视控件的Parent属性来判断控件是否在这个窗体中&#xff0c;还可以用…

js逆向工具-v-jstools插件自动补环境

目录 一、反爬参数如图二、知识点提前Get三、v_jstools安装四、详细分析流程方法一&#xff1a;本案例操作流程之-生成临时环境-直接可以用的情况方法二&#xff1a;本案例操作流程之-生成临时环境-不可以直接用&#xff0c;需要调试补下 五、文章与视频 一、反爬参数如图 二、…

so-vits-svc 4.1 详细使用记录

前几个月在B站听到了许多AI孙燕姿的“作品”&#xff0c;自己也很好奇是如何做到的。这不最近有了点时间&#xff0c;体验实践了一下。 其实so-vits-svc的文档写的已经比较详细了。但实际操作起来&#xff0c;因为环境的原因会遇到各种问题。本篇也是将我遇到的问题整理出来&a…

字母异位词分组——力扣49

vector<vector<string>> groupAnagrams(vector<string>& strs){unordered_map<string, vector<string>> mp;for

总结记录Keras开发构建神经网络模型的三种主流方式:序列模型、函数模型、子类模型

Keras是一个易于使用且功能强大的神经网络建模库&#xff0c;它是基于Python语言开发的。Keras提供了高级API&#xff0c;使得用户能够轻松地定义和训练神经网络模型&#xff0c;无论是用于分类、回归还是其他任务。 Keras的主要特点如下&#xff1a; 简单易用&#xff1a;Kera…

自动化脚本本地可以跑成功云服务器报错:FileNotFoundError:[Errno 2] No such file or directory

出现这种情况&#xff0c;原因之一可能是脚本中某些路径没有使用自动获取&#xff0c;当使用相对路径可能就会报错 把路径改为自动获取之后 self.data get_yaml_data(os.path.join(configs_path, method_path.yaml))再次运行代码就不会报文件找不到的错误了

如何保障Facebook账号登录稳定

当谈到保障Facebook账号的稳定性时&#xff0c;我们不得不提到那些令人头疼的情况——Facebook账号被封。尽管我们已经踏入数字化的未来&#xff0c;但是被封号似乎是一个时常困扰着社交媒体用户的问题。那么&#xff0c;让我们来看看一些常见的Facebook账号被封的原因&#xf…

【TDSQL-C Serverless 产品体验】| 实战分享 | 文末送书

目录 一. &#x1f981; 产品引入二. &#x1f981; TDSQL-C数据库使用体验——实战案例2.1 实战案例介绍2.2 实操指导1. 购买TDSQL数据库2. [配置选择](https://buy.cloud.tencent.com/cynosdb#/)3. 配置TDSQL-C 集群4. 点击授权并创建5. 记住主机名和端口6. 登录TDSQL7. 链接…

Bit Timing Configuration

注意 此功能是实验性的。在未来的版本中,实现可能会发生变化。 ISO 11898中规定的CAN协议允许针对给定应用优化比特率、采样点和采样数量。这些被称为比特定时的参数可以被调整以满足通信系统和物理通信信道的要求。 这些参数包括: tseg1: 时间段1(TSEG1)是从同步段结束到采…

24V输入防反接电路

#24V输入防反接电路 &#xff08;部分图片参考东沃电子&#xff09; 用于对输入的24V电源进行防反接及ESD保护&#xff0c;可用于EMC测试实验的电源输入保护&#xff0c;额定电流3A&#xff0c;后级电路最大损坏电压为48V。 1.24V输入防反接原理图 如上图所示&#xff0c;24V_…

华为AR路由器 典型配置案例——以太网交换

目录 Eth-Trunk 例&#xff1a;配置三层链路聚合 组网需求 操作步骤 检查配置结果 配置脚本 VLAN 举例&#xff1a;配置基于接口划分VLAN&#xff0c;实现同一VLAN内的互通&#xff08;同设备&#xff09; 组网需求 操作步骤 检查配置结果 配置脚本 举例&#xff…

2023年国赛 高教社杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

ui设计专业学生实习报告范文

ui设计实习报告范文篇四 经过了四年的理论学习&#xff0c;使我们对平面设计有了基本掌握&#xff0c;对于平面设计这个专业也有了一个系统的学习和掌握。我们即将离开大学校园&#xff0c;作为平面设计专业的毕业生&#xff0c;心中想得更多的是如何去做好一个平面设计师、如…

操作系统-笔记-第五章-输入输出管理

目录 五、第五章——输入输出管理 1、IO设备的概念和分类 &#xff08;1&#xff09;IO设备分类——使用特性 &#xff08;2&#xff09;IO设备分类——传输速率 &#xff08;3&#xff09;IO设备分类——信息交换&#xff08;块、字符&#xff09; 2、IO控制器 &#x…

【Terraform学习】使用 Terraform 将 EC2 实例作为 Web 服务器启动(Terraform-AWS最佳实战学习)

使用 Terraform 将 EC2 实例作为 Web 服务器启动 实验步骤 前提条件 安装 Terraform&#xff1a; 地址 下载仓库代码模版 本实验代码位于 task_ec2 文件夹中。 变量文件 variables.tf 在上面的代码中&#xff0c;您将声明&#xff0c;aws_access_key&#xff0c;aws_secr…

入耳式无线耳机哪个款式好?无线蓝牙耳机音质排行榜

本着要买就认认真真的挑选一台的想法。和有线耳机相比&#xff0c;无线耳机确实有一定优势&#xff0c;比如说它的实用性明显要高不少。那么如何挑选&#xff0c;一款合适自己的耳机呢&#xff0c;首先&#xff0c;还是挑选出当前的热门款式&#xff0c;和各种网红推荐款&#…

Linux 挂载局域网内共享目录

Linux 挂载局域网内共享目录 1、安装samba服务端2、samba服务端配置3、添加samba服务访问账户4、防火墙5、重启服务6、windows访问7、linux访问 1、安装samba服务端 sudo apt-get install -y samba yum install -y samba2、samba服务端配置 vim /etc/samba/smb.conf在文档尾部…

shell 04(shell字符串变量)

一、字符串变量 字符串 (String)就是一系列字符的组合。字符串是 Shell编程中最常用的数据类型之一(除了数字和字符串&#xff0c;也没有其他类型了) 1.1 字符串格式 1.单引号方式 varabc 任何字符都会原样输出&#xff0c;在其中使用变量是无效的。 2.双引号方式,推荐 …

(动态规划) 剑指 Offer 42. 连续子数组的最大和 ——【Leetcode每日一题】

❓ 剑指 Offer 42. 连续子数组的最大和 难度&#xff1a;简单 输入一个整型数组&#xff0c;数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为 O(n)。 示例1: 输入: nums [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1…