zookeeper之数据模型

1.zookeeper数据结构图

在这里插入图片描述

	zookeeper的数据模型,在结构上和标准文件系统非常相似;拥有一个层次的命名空间,
	都是采用食宿行层次结构,zookeeper树中的每个节点都被称为一个Znode;
和文件系统的目录树一样,zookeeper树中的每个节点可以拥有子节点,但也有不同之处;如下:

1.1 Znode兼具文件和目录两种特点

1.即像文件一样维护着数据,元信息 ACL 时间戳等数据结构,
2.又像目录一样可以作为路径标示的一部分,并可以具有子Znode, 
3.用户可以对Znode具有增 删 改 查等操作(权限允许的情况下)

1.2 Znode具有原子性操作

1.读操作将获取与节点相关的所有的数据
2.写操作也将替换点节点的所有数据
3.另外,每一个节点都拥有自己的ACL(访问控制列表),这个列表规定了用户的权限,
   即限定了特定用户对目标节点可以执行的操作

1.3 Znode存储数据大小有限制

1.zookeeper虽然可以关联一些数据,但是并没有被设计为常规的数据库或者大数据存储,
  相反的是,它用来管理调度数据,比如分布式应用中的配置文件信息,状态信息,汇集位置等等;
2.上面的这些数据的共同特性就是他们都是很小的数据,通常以KB为大小单位,
   Zookeeper的服务器和客户端都设计为严格检查并限制为每个Znode的数据大小之多1M,当然常规远小于这个值;

1.4 Znode 通过路径引用

1.如同linxu系统文件路径一样,路径必须是绝对的,因此他们必须是由斜杠字符开头
2.路径必须是唯一的
3.路径由Unicode字符串组成,并且有一些限制,字符串"zookeeper"用来保存管理信息,比如关键配置额信息

2.节点类型

Znode 有两种:分别是 临时节点和永久节点;
节点的类型在创建的时候即被确定,并且不能改变;

2.1 临时节点

1.该节点的生命周期依赖于创建他们的会话,一旦会话结束,临时节点将被自动删除,
  当然可以也可以手动删除,
2.临时节点不允许拥有子节点;

2.2 永久节点

1.该节点的生命周期不依赖于会话
2.并且只有在客户端显示执行删除的时候,他们才能被删除;

2.3 节点的序列化特性

1.Znode还有一个序列化的特性,如果创建的时候指定的话,该Znode的名字后面会自动追加一个不断增加的序列号;
2,序列号对于此节点的父节点来说是唯一的,这样便会记录每个子节点创建的先后顺序;
3.它的格式为%10d%(10位数字,没有数值的数位用0补充,"00000000001")

在这里插入图片描述

3.节点属性

每个znode都包含了一系列的属性,通过命令get,可以获得节点的属性

[zk: localhost:2181(CONNECTED) 5] create -s /dubbo hello
Created /dubbo0000000002
[zk: localhost:2181(CONNECTED) 9] get /dubbo0000000002
hello
cZxid = 0x20000be2f
ctime = Mon Dec 31 08:50:13 CST 2018
mZxid = 0x20000be2f
mtime = Mon Dec 31 08:50:13 CST 2018
pZxid = 0x20000be2f
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 10] 

3.1.dataVersion

1.数据版本号,每次对节点进行set操作,dataVersion的值都会增加1(即使设置的是相同的数据);
2.可以避免数据更新时出现的先后顺序问题;

3.2.cversion

1.子节点的版本号,即 children version
2.当znode的子节点有变化时,cversion的值会增加1

3.3.aclversion

ACL的版本号

3.4.cZxid

1.c 顾名思义:create; Z:Znode
2.znode节点创建的事务id;在创建新的节点的时候的事务id;

3.4.mZxid

1.m:modify
2.Znode被修改的事务id;即每次对znode的修改都会更新mZxid

3.5.ctime

1.节点创建时的时间戳

3.6.mtime

1.节点最新一次更新发生时的时间戳

3.7.ephemeralOwner

1.如果该节点为临时节点,ephemeralOwner 值表示与该节点绑定的session id,
  如果不是,ephemeralOwner 值为0;
2.在client和server通信之前,首先需要建立连接,该连接称为session,
  连接建立后,如果发生连接超时,授权失败或者显示关闭连接,连接便处于closed状态,
  此时session结束;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东山富哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值