• ZooKeeper的数据模型

    ZooKeeper提供的命名空间与标准的文件系统的命名空间非常类似;名称是由斜杠(/)分隔的一系列路径元素;ZooKeeper命名空间中的每个节点都由路径标识,如下图;

    

    ZooKeeper命名空间中的每个节点都可以具有与其关联的数据以及子节点。就像拥有一个文件系统一样,该文件系统也允许文件成为目录(ZooKeeper中的每个节点会存储一些自身的数据:状态信息,配置,位置信息等,因此存储在每个节点上的数据通常很小,在字节到千字节范围内);

    在ZooKeeper树形结构中的每个节点都可以称为znode;znode维持了一个stat结构,它包括数据变化的版本号、访问控制列表变化、和时间戳,允许缓存验证和协调更新;每当znode的数据有变化,版本号就会增加(例如,每当客户端检索数据时同时它也获取数据的版本信息);

  • Znode类型
    • 持久节点(PERSISTENT)

      持久节点的存活时间不依赖于客户端会话,只有客户端在显式执行删除节点操作时,节点才消失;

创建了一个持久节点/module,且其数据为”demo”
create /module demo
    • 持久顺序节点(PERSISTENT_SEQUENTIAL)

      该节点创建后持久存在,相对于持久节点它会在节点名称后面自动增加一个10位数字的序列号,这个计数对于此节点的父节点是唯一,如果这个序列号大于2^32-1就会溢出;

create加上-s参数,可以创建持久顺序节点
create -s /module/app app

      上面的命令便创建了一个持久顺序节点/module/app0000000001;如果再执行此命令,则会生成节点 /module/app0000000002;

    • 临时节点(EPHEMERAL)

      临时节点的存活时间依赖于客户端会话,当会话结束,临时节点将会被自动删除(当然也可以手动删除临时节点);利用临时节点的这一特性,我们可以使用临时节点来进行集群管理,包括发现服务的上下线等; ZooKeeper规定,临时节点不能拥有子节点;

创建了一个临时节点 /module/app,数据为”app”,会话关闭后,临时节点会被删除
create /module/app app

    

    • 临时顺序节点(EPHEMERAL_SEQUENTIAL)

    具有临时节点特征,但是它会有序列号,分布式锁中会用到该类型节点

create加上-s参数,可以创建顺序节点
create -s -e /module/app app
    • 节点属性

    使用 get /module/app20000000001 获取节点的数据,如下图;

    

cZxid 创建节点时的事务ID
ctime 创建节点时的时间
mZxid 最后修改节点的事务ID
mtime 最后修改节点时的时间
pZxid 表示该节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID
cversion 子节点版本号,子节点每次修改版本号加1
dataversion 数据版本号,数据每次修改该版本号加1
aclversion 权限版本号,权限每次修改该版本号加1
ephemeralOwner   用于临时节点,表示创建该临时节点的事务id,如果当前的节点不是临时
节点,该字段值为0  
 numChildren 该节点拥有子节点的数量 

    

     Zookeeper里面的版本号它表示的是对数据节点的内容、子节点列表或者ACL信息的修改次数;节点创建时dataversion、aclversion,cversion都为0;

     Zookeeper中的版本号就是乐观锁,修改节点数据之前会读取这个数据并记录该数据版本号,当需要更新时会携带这个版本号去提交,如果此时携带的版本号(上次读取出来的)和当前节点的版本号相同,则说明该数据没有被修改过,那么数据修改就会成功提交,如果数据修改失败,说明该数据在你读取之后和提交之前这段时间内被修改了。 

     通过set命令并携带正确的版本号提交更新,版本号相同更新就会成功,并将dataversion的值加1;

      

    

    再次更新并使用之前的版本号那么就会失败;

    

ZooKeeper的数据模型的更多相关文章

  1. ZooKeeper:数据模型

    ZooKeeper数据模型 ZNode ZNode 分类 Stat Watcher Watcher工作原理 Watcher事件说明 Watcher注册 事件发布 示例 ZooKeeper 数据模型 整 ...

  2. Zookeeper基本数据模型

    一.Zookeeper基本数据模型 是一个树形结构,类似于前端开发中的tree.js组件 zk的数据模型也可以理解为linux/unix的文件目录  /usr/local/... 每一个节点称之为zn ...

  3. 第3章 ZooKeeper基本数据模型

    第3章 ZooKeeper基本数据模型 3-1 zk数据模型介绍 3-2 zk客户端连接关闭服务端,查看znode ./zkCli.sh Ctrl + C 退出 =================== ...

  4. ZooKeeper服务-数据模型

    ZooKeeper是一个具有高可用性的高性能协调服务. 数据模型 ZooKeeper维护着一个树形层次结构,树中的节点被称为znode.Znode可以用于存储数据,并且有一个与之相关联的ACL(Acc ...

  5. 第3章 ZooKeeper基本数据模型 3-1 zk数据模型介绍

    基本数据模型是zookeeper的重点. 它是参照Linux/Unix的目录结构. 子节点就相当于是父目录下的一个子目录,在zookeeper里面它是称之为节点,父节点和子节点,然后每一个节点就会有一 ...

  6. Zookeeper(二)数据模型

    Zookeeper数据模型ZNode 问题 ZK的数据模型ZNodes是什么样的: 树形结构,每个叶子节点都存储着数据,且可挂载子节点: 路径作为叶子节点名称,数据作为叶子节点内的数据: Znode可 ...

  7. Zookeeper概念学习系列之zookeeper的数据模型

    1.层次化的目录结构,命名符合常规文件系统规范. 2.每个节点在zookeeper中叫做znode,并且有其有一个唯一的路径标识. 3.znode中的数据可以有多个版本,比如某一路径下存有多个数据版本 ...

  8. zookeeper系列之九—zookeeper数据模型

    http://nileader.blog.51cto.com/1381108/946788 本文主要讲述了Zookeeper的数据模型,包括Zookeeper的数据视图,节点的层次结构以及节点类型等基 ...

  9. ZooKeeper 数据模型

    本文主要讲述ZooKeeper的数据模型,包括ZooKeeper的数据视图,节点的层次结构以及节点类型等基本属性.Zookeeper的视图结构类似标准的Unix文件系统,但是没有引入文件系统相关概念: ...

随机推荐

  1. javac中不引人注目的编码小坑

    来看下面这段java程序: public class Test{ public static void main(String[] args){ System.out.println("哈哈 ...

  2. docker部署LAMP架构并部署上线wordpress博客系统

    第一步:直接在镜像仓库拉取LAMP镜像 [root@ken-node3 ken]# docker pull tutum/lamp 第二步:查看已经获取到的镜像 [root@ken-node3 ken] ...

  3. springboot中关于Long类型返回前端精度丢失问题处理

    使用了HuTool这个雪花算法后,会出现丢失精度的问题 hutool算法使用地址 对于一些大的业务表,自增主键这里 接口层得注意下是否会产生大数值 设计接口的时候采用String类型. 在项目中,我们 ...

  4. 《Head First 设计模式》:状态模式

    正文 一.定义 状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类. 要点: 状态模式允许一个对象基于内部状态而拥有不同的行为. 状态模式将状态封装成为独立的类,并将动作委托到代 ...

  5. tkMybatis和Mybatis Generator的结合使用

    tkMybatis配置 tkmybatis是基于Mybatis框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作,以免写任何sql语句. tkMybatis通常与Mybatis以及Mybat ...

  6. @RequiresPermissions注解的作用,超级简单的权限验证

    是shiro里面权限验证的一个注解 @RequiresPermissions(value = {"engineeringPause:download", "workCon ...

  7. tomcat开机自启

    https://blog.csdn.net/qq_31150365/article/details/89330366 参考连接 1,修改tomcat的catalina.sh文件 # vim /usr/ ...

  8. java版集成Allure报告--注释使用说明

    testNG集成Allure报告--注释使用说明 前置条件 首先需要下载allure的zip包解压,然后配置环境变量即可(win).allure的GitHub下载地址: 然后执行testn.xml或者 ...

  9. <stdbool.h>的使用

    转载: 1.https://www.cnblogs.com/jediael/archive/2013/02/03/4304259.html 2.https://zhidao.baidu.com/que ...

  10. 洛谷P1450 [HAOI2008]硬币购物 背包+容斥

    无限背包+容斥? 观察数据范围,可重背包无法通过,假设没有数量限制,利用用无限背包 进行预处理,因为实际硬币数有限,考虑减掉多加的部分 如何减?利用容斥原理,减掉不符合第一枚硬币数的,第二枚,依次类推 ...