| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> zookeeper源码解析(一) -> 正文阅读 |
|
[数据结构与算法]zookeeper源码解析(一) |
2021SC@SDUSC? 从ZKDatabase说起ZKDatabase类维护着zookeeper的内存数据库,具体包括了数据树,会话信息和事务提交日志等。 首先,我们不妨来看一下ZKDatabase类的静态变量和成员变量。
dataTree:维护了树形数据结构,不包含任何网络相关或客户端连接相关的代码。 sessionWithTimeouts:存储sessionID和对应的过期时间,使用并发哈希表ConcurrentHashMap作为变量类型,这是HashMap的一个线程安全的、支持高效并发的版本。 (PS:这里简单介绍一下sessionID和对应的过期时间的含义。 sessionID: 会话ID,用来唯一标识一个会话,每次客户端创建会话的时候,zookeeper 都会为其分配一个全局唯一的 sessionID。 Timeout:会话超时时间。客户端在构造 Zookeeper 实例时候,向服务端发送配置的超时时间,server 端会根据自己的超时时间限制最终确认会话的超时时间。) snapLog:维护事务日志和数据快照,snapLog和具体的zookeeper数据库是一一对应的。 minCommittedLog,maxCommittedLog:zookeeper维护commitedLog队列,minCommittedLog和maxCommitedLog分别对应队列中事务编号的最小值和最大值(值得注意的是,zookeeper指定了这个队列有个默认最大长度500如下图,当队列更新要超过最大长度时,会移除目前队列中最早的事务)。
PS:zookeeper的事务ID(zxid)遵循如下规则: zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。 DataTree-zookeeper数据库的核心上面简单介绍了ZKDatabase类后,让我们先把焦点转到DataTree类。(我们先对ZKDatabase类中一个实例所要维护的这几个变量的结构做深入了解,之后再回到ZKDatabase类,看它提供了哪些函数哪些行为来维护这些变量)。DataTree无疑是zookeeper所构建的内存数据库的核心部分,其维护了一个树形数据结构。 DataTree主要维护两个结构,一个是各个绝对路径到数据节点的哈希表,另一个是由数据节点构成的树。并且对路径的所有访问是通过哈希表,仅在序列化到磁盘时遍历该树。如下成员变量nodes即存储着哈希表,是对哈希表的简单封装。
DataTree构造函数
PS:关于配额,是指节点可以设置配额,如限制节点可以有几个子节点。但事实上,如果超过了配额限制,也只是在日志上会出现警告信息,实际内容还是被存储了。 这里把构造函数写成一个public,一个default,而public实际上基本只是调用default构造函数的形式我觉得可能仅仅是为了方便测试,事实上,在系统实现代码上都是调的public的构造函数,只有在测试代码中用到了default构造函数。 题外趣事?在阅读源码的过程中,我发现即使是出自apache这样代码质量比较高的组织,代码中也会出现p,pp...这样的命名方式。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:43:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |