聊聊、Zookeeper 数据结构和操作命令
Zookeeper 的视图结构跟标准的 Unix 文件系统很像,都有一个根节点 / 。在根节点下面就是一个个的子节点,我们称为 ZNode。ZNode 是 Zookeeper 中最小数据单位,在 ZNode 下面又可以再挂 ZNode,这样一层层下去就形成了一个层次化命名空间 ZNode 树,我们称为 ZNode Tree。对于 ZNode 节点,我们可以增删改查操作,其实有很多的开源缓存框架和 Zookeeper 相似,只是数据结构不一样。像 Redis、Memcache 等,都有自己的数据操作命令,以及自己的数据存储结构。
一、【数据结构】
我们先来看看 Zookeeper 的数据模型图

在 Zookeeper 中,每一个数据节点都是一个 ZNode,上图根目录下有两个节点,分别是:app1 和 app2,其中 app1 下面又有三个子节点。那么我们来看看 ZNode 数据结构到底是什么样子的呢。首先我们来了解 ZNode 的类型。
ZNode 的类型有哪些?
Zookeeper 节点类型可以分为三大类:持久性节点(Persistent)、临时性节点(Ephemeral)、顺序性节点(Sequential)。现实开发中在创建节点的时候通过组合可以生成以下四种节点类型:持久节点、持久顺序节点、临时节点、临时顺序节点。
持久节点就是节点被创建后会一直存在服务器,直到删除操作主动清除,这种节点也是最常见的类型。
持久顺序节点就是有顺序的持久节点,节点特性和持久节点是一样的,只是额外特性表现在顺序上。顺序特性实质是在创建节点的时候,会在节点名后面加上一个数字后缀,来表示其顺序。
临时节点就是会被自动清理掉的节点,它的生命周期和客户端会话绑在一起,客户端会话结束,节点会被删除掉。与持久性节点不同的是,临时节点不能创建子节点。
临时书序节点就是有顺序的临时节点,和持久顺序节点相同,在其创建的时候会在名字后面加上数字后缀。
ZNode 的数据结构是怎么样的呢?
我们看看结构图

整个 ZNode 节点内容包括两部分:节点数据内容和节点状态信息。图中 app1 是数据内容,其他的属于状态信息。那么这些状态信息都有什么含义呢?
cZxid 就是 Create ZXID,表示节点被创建时的事务 ID。
mZxid 就是 Modified ZXID,表示节点最后一次被修改时的事务 ID。
ctime 就是 Create Time,表示节点创建时间。
mtime 就是 Modified Time,表示节点最后一次被修改的时间。
pZxid 表示该节点的子节点列表最后一次被修改时的事务 ID。只有子节点列表变更才会更新 pZxid,子节点内容变更不会更新。
cversion 表示子节点的版本号。
dataVersion 表示内容版本号。
dataLength 表示数据长度。
numChildren 表示子节点数。
ephemeralOwner 表示创建该临时节点时的会话 sessionID,如果是持久性节点那么值为 0。
二、【操作命令】

通过 Help 命令我们看到 Zookeeper 提供很多的操作命令,我们不去一一介绍,选几个我们经常用的吧。
get path [watch] 命令
path 是路径 [watch] 是监视器,一般我们用 API 编程的时候,在 getData、exists、getChildren 时候会自己去实现一个 watcher,或者用默认的 watcher。在这里 get 命令的用法可以默认 watch 就好了,例如 get /app1。如下图:

大家注意 dataVersion = 0,这个是数据内容的版本号,Zookeeper 保证一致性,基本上都会有个版本控制。
set path data [version] 命令
path 是路径 data 是数据内容 [version] 是版本号,我们可以通过 set /app1 newapp1 来更新节点 /app1 的内容,也可以自己设置版本号,不过通过命令行去设置版本号通过 set /app1 newapp1 2。
如下图:

大家可以发现 dataVersion = 1,版本号默认加 1。
delete path [version] 命令
path 是节点路径 [version] 版本号,如下图:

我们再去 get 看看

Node does not exists:/app1,app1 节点不存在了。
create [-s] [-e] path data acl 命令
这个命令后面的参数比较多,[-s] 顺序节点,[-e] 临时性节点,path 路径,data 数据内容,acl 权限。我们创建一个持久性节点。

大家发现没有,节点名后面加上了一串数字,这个就是 Zookeeper 顺序标识。而且是持久性节点。

临时性节点 app2,关闭客户端会话断开会自动清除。

谢谢大家观看!
聊聊、Zookeeper 数据结构和操作命令的更多相关文章
- Zookeeper核心工作机制(zookeeper特性、zookeeper数据结构、节点类型)
10.1 zookeeper特性 1.Zookeeper:一个leader,多个follower组成的集群. 2.全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个ser ...
- ZooKeeper 数据结构 & 命令
0. 说明 记录 ZooKeeper 数据结构 & 命令 1. ZooKeeper 数据结构 ZooKeeper 特性: ZooKeeper 文件系统以 / 为根目录,文件系统为树形结构,每 ...
- ZooKeeper数据结构
Time in ZooKeeper ZooKeeper跟踪时间的多种方式 1)Zxid:每个ZooKeeper状态变化将会接收到一个zxid(ZooKeeper Transaction Id)的时间戳 ...
- 聊聊Zookeeper应用场景、架构设计、选主机制
Zookeeper作为一个分布式协调系统提供了一项基本服务:分布式锁服务,分布式锁是分布式协调技术实现的核心内容.像配置管理.任务分发.组服务.分布式消息队列.分布式通知/协调等,这些应用实际上都是基 ...
- Redis 02: redis基础知识 + 5种数据结构 + 基础操作命令
Redis基础知识 1).测试redis服务的性能: redis-benchmark 2).查看redis服务是否正常运行: ping 如果正常---pong 3).查看redis服务器的统计信息: ...
- HBase与Zookeeper数据结构查询
一.前言 最近一年了吧,总是忙于特定项目的业务分析和顶层设计,很少花时间和精力放到具体的技术细节,感觉除了架构理念和分析能力的提升,在具体技术层次却并没有多大的进步.因为一些原因,总被人问及一些技术细 ...
- 聊聊zookeeper的分布式锁
分布式锁就是多台机器,分布在不同的JVM中,这些不同JVM内的方法需要获取一个唯一锁,比如获取锁之后要把数据写入数据库,保证数据在同一时刻只有一台机器写入数据库. 分布式锁的实现有多种实现方法,除了今 ...
- redis的数据结构及操作命令
一.字符串: redis中最为基础的存储类型,以二进制存储,value的字符串最多512M,Key做多1024字节. 常用命令:赋值(set).取值(get).删除(del),递增(incr/incr ...
- 聊聊经典数据结构HashMap,逐行分析每一个关键点
本文基于JDK-8u261源码分析 本文原创首发于 奇客时间(qiketime) 1 简介 HashMap是一个使用非常频繁的键值对形式的工具类,其使用起来十分方便.但是需要注意的是,HashMap不 ...
随机推荐
- leetcode 【 Search in Rotated Sorted Array II 】python 实现
题目: 与上一道题几乎相同:不同之处在于array中允许有重复元素:但题目要求也简单了,只要返回true or false http://www.cnblogs.com/xbf9xbf/p/42545 ...
- Boost入门
[转载网友转载的 不过不知道原作者地址] Boost入门向导 简介:boost是一套开源的.高度可移植的C++模板库.它由C++标准委员发起,且里面很多组件有望成为下一代的C++标准库,其地位将会与S ...
- jsonp的原理及应用
https://blog.csdn.net/u011897301/article/details/52679486
- easyui loader 改变rows total page rows等参数名称!
公司需要对接客户接口,但客户接口已经确定,分页请求的参数以及返回的数据是客户自定义的名称,与easyui 所封装的参数无法对应,这是需要改变参数名称,这时我们可以使用loader方法: loader: ...
- 求解Catalan数,(大数相乘,大数相除,大数相加)
Catalan数 卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名.历史上,清代数学家明安图(1692年-1763年)在其<割圜 ...
- 一个 Java 的 Socket 服务器和客户端通信的例子
一个 HelloWord 级别的 Java Socket 通信的例子.通讯过程: 先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求.然后运行 Client 端,客户端发出连接请 ...
- [TC_SRM_460]TheCitiesAndRoadsDivOne
[TC_SRM_460]TheCitiesAndRoadsDivOne 试题描述 John and Brus have become very famous people all over the w ...
- openssl-1.0.1c交叉编译动态库(转)
linux编译相关(13) 版权声明:本文为博主原创文章,未经博主允许不得转载. #交叉编译openssl ------直接修改Makefile新加这一行:CROSS_COMPILE= arm-un ...
- location.origin兼容
if (!window.location.origin) { window.location.origin = window.location.protocol + "//" + ...
- 浅谈 easyui tabs 的href和content属性
众所周知,jQuery Easyui 的tabs插件有两种方式加载某个tab(标签页)上的内容:“href远程请求”和“content本地内容”,本文就两种方式的优缺点进行简单分析和思考. 两者特点: ...