ZooKeeper数据模型

基本数据模型

ZK数据模型是一个树形结构,有点像前端的tree.js组件,也类似Linux操作系统的文件系统,也是以树的形式来存储。严格来说是一颗多叉树,每个节点上都可以存储数据,每个节点还可以拥有N个子结点,最上层是根节点以“/”来代表。

在谈到分布式的时候,我们通常说的“节点”是指组成集群的每一台机器,在ZK中,“节点”分为两类,第一类同样是指构成集群的机器;第二类是指数据模型中的数据单元,我们称之为数据节点。

在ZK中,每一个数据节点也被成为znode,它可以有子节点,也可以有数据。每个节点分为临时节点和永久节点,临时节点在客户端会话断开后消失,而且临时节点下不能存在子节点。永久节点就相当于进行了持久化,只能人为的去删除;临时节点也可以人为的删除,但是在session失效后,临时节点的所有数据都会丢失。

ZK保持同级节点的唯一性,也就是说一个节点下面不能有两个完全一样的节点。

ZK数据节点还分为有序节点和无序节点。

ZK节点必须有父子关系,必须存在先后。

每一个ZK节点都有各自的版本号,每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)。可以通过命令行来显示节点的详细信息。

删除/修改过时的节点,版本号不匹配则会报错。比如在查询某一个节点的时候,比如这时候版本是1,经过两个人的删除或者修改之后,这时候版本就会由1变为2再变为3。如果我们需要删除这个节点,但是如果传入的版本号是旧的版本号,那么这时候就会报出一个版本号不匹配的异常,这个跟在数据库中使用乐观锁很像(关于数据库乐观锁可参看:https://blog.csdn.net/Dongguabai/article/details/82902790)。

每一个ZK节点存储的数据量不宜过大,几k即可,比如存储一些比较简单的对象或者size比较小的集合,不适合放很多很庞大的集合。每个节点还可以设置acl,可以通过权限来限制用户的访问。

关于节点属性可参看:https://blog.csdn.net/Dongguabai/article/details/82901686

下面来演示一下ZK节点的几个特性。

比如当前节点下已经有了一个zookeeper节点,又新建了一个就会报错提示:

创建节点,使用create命令:

后面有两个参数-s和-e。-s表示sequence,-e表示临时。

现在创建一个临时节点:

这里出现了异常,退出了当前会话,重新连接服务:

刚刚创建的临时节点已经不见了;

先创建一个普通节点seq:

在seq下创建有序节点:

是从0开始,依次递增:

再创建一个临时节点temp:

在temp下创建一个子节点temp1,会出现错误提示:

基本操作

在ZK的bin目录下有很多可操作脚本:

这里使用:

./zkCli.sh

可以看到连接的是localhost:2181,再按下回车:

可以看到已经连接上localhost:2181,状态是已经连接。

更多关于ZK的常用命令可以参看:https://blog.csdn.net/Dongguabai/article/details/82907095

ls命令可以查看指定目录下的文件:

可以看出zookeeper是quota的父节点,在quota中是没有任何数据的。

Ctrl+c可以停止当前客户端:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值