ZooKeeper系统模型之内存数据。

        ZooKeeper的数据模型是一棵树,而从使用角度看,ZooKeeper就像一个内存数据库一样。在这个内存数据库中,存储了整棵树的内容,包括所有的节点路径、节点数据及其ACL信息等,ZooKeeper会定时将这个数据存储到磁盘上。接下来我们就一起来看看这棵“树”的数据结构,如下图所示。

DataTree

        DataTree是ZooKeeper内存数据存储的核心,是一个“树”的数据结构,代表了内存中的一份完整的数据。DataTree不包含任何与网络、客户端连接以及请求处理等相关的业务逻辑,是一个非常独立的ZooKeeper组件。

DataNode

        DataNode是数据存储的最小单元,其数据结构如上图所示。DataNode内部除了保存了节点的数据内容(data[])、ACL列表(acl)和节点状态(stat)之外,正如最基本的数据结构中对树的描述,还记录了父节点(parent)的引用和子节点列表(children)两个属性。同时,DataNode还提供了对子节点列表操作的各个接口:

nodes

        DataTree用于存储所有ZooKeeper节点的路径、数据内容及其ACL信息等,底层的数据结构其实是一个典型的ConcurrentHashMap键值对结构:

        在nodes这个Map中,存放了ZooKeeper服务器上所有的数据节点,可以说,对于ZooKeeper数据的所有操作,底层都是对这个Map结构的操作。nodes以数据节点的路径(path)为key,value则是节点的数据内容:DataNode。

        另外,对于所有的临时节点,为了便于实时访问和及时处理,DataTree中还单独将临时节点保存起来:

ZKDatabase

        ZKDatabase,正如其名字一样,是ZooKeeper的内存数据库,负责管理ZooKeeper的所有会话、DataTree存储和事务日志。ZKDatabase会定时向磁盘dump快照数据,同时在ZooKeeper服务器启动的时候,会通过磁盘上的事务日志和快照数据文件恢复成一个完整的内存数据库。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值