1 ,zookeeper 中的数据,是可以进行增删改查的 :
对数据的改动,既可以用 zookeeper 自带的客户端来操作,也可以通过 java API 来操作。
2 ,zookeeper 客户端 :
能访问 zookeeper 中的数据的工具,都是 zookeeper 的客户端。
zookeeper 的常用的客户端包括 zookeeper 自带的客户端 zkCli.sh ,也可以通过 javaAPI 来操作 zookeeper 中的数据。
3 ,zkCli.sh – 连接 zookeeper : 连接以后就可以操作 zk 数据了
zkCli.sh -server node01:2181
4 ,zkcli.sh – 断开连接 :
quit
5 ,zkcli.sh – 查看帮助 :
help
6 ,zkcli.sh – 查看子节点 :ls
ls /
7 ,zkcli.sh – 新增节点,并且携带数据 :create
create /xyj wce
create /xyj/sf ts
8 ,zookeeper 的数据结构 – 树形结构 :重点理解
- 一句话 :zookeeper 的数据是挂在节点上的。
这是一种我们之前没有见过的数据结构。 - 看图 :zk 适合表示具有层级关系的数据
- 接下来我们把树上的果子填满 :
create /xyj wce
create /xyj/sf ts
create /xyj/dsx swk
create /xyj/esx zbj
create /xyj/ssd ss
create /xyj/sf/wq jgz
create /xyj/dsx/wq jgb
9 ,zkCli.sh – 查 : 查看子节点
查看 /xyj 节点中的子节点 :ls /xyj
10 ,zkCli.sh – 查 : 查看节点携带的数据
查看 /xyj 这个节点所携带的数据是什么 : get /xyj
11 ,zkCli.sh – 改 :
修改 /xyj 节点的数据的内容 : 我不想让他等于 wce 了,我让他等于 wucehngen :set /xyj wuchengen
12 ,zkCli.sh – 删 : 单个节点
删除 /xyj/ssd 节点 : delete /xyj/ssd
13 ,zkCli.sh – 删 : 整个目录
删除 /syj 节点,并且,删除掉 /xyj 的所有子节点 : rmr /xyj
14,元数据信息 :
-
我们把刚才删除掉的数据再新增回来 :
create /xyj wce
create /xyj/sf ts
create /xyj/dsx swk
create /xyj/esx zbj
create /xyj/ssd ss
create /xyj/sf/wq jgz
create /xyj/dsx/wq jgb -
查询 /xyj 节点所携带的数据 :
get /xyj -
看到了如下内容 :
-
携带的数据是 : wce
-
元数据信息 :
cZxid = 0x160000000b
ctime = Fri May 24 16:24:45 CST 2019
mZxid = 0x160000000b
mtime = Fri May 24 16:24:45 CST 2019
pZxid = 0x160000000f
cversion = 4
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 4 -
元数据信息解释 :
1 ,cZxid :创建节点时的事务的 id
2 ,ctime :节点的创建时间
3 ,mZxid :修改节点时的事务的 id
4 ,pZxid :跟子节点有关,如果子节点新增了,或者删除了,这个值就会改变。
5 ,事务 id 到底是个啥 :
每次增删改操作,对于 zk 来说,都是一次改变,都会记录下来一个 id ,这,就是事务 id 。
zXid 是创建节点时产生 id ,不会改变。
mZxid 是修改时产生的 id ,每次修改该节点,他都会改变
操作 :修改一个节点的数据,看看他的 3 个 zxid 会不会改变。
6 ,cversion :子节点的版本号,删除或添加子节点,版本号会自增
7 ,dataVersion : 数据版本号
每次修改数据,这个号码都会自增,这个特性通常用在高并发操作的时候。
操作一下 :一直的修改一个节点的数据,发现他的版本号一直在增加。
8 ,aclVersion :权限版本号
每次修改权限,版本号就自增
9,Action Control List (ACL): 动作控制列表
权限管理机制,管理所有 zNode 的读写。
10,ephemeralOwner :节点拥有者( 指的是客户端 )
如果是临时节点这个是znode拥有者的session id。如果不是临时节点则是0。
11,dataLength : znode的数据长度
默认最大值,1M ,所以说,zk 不可以用来存储数据,他是存储配置信息用的。再说一遍,不要把 zookeeper 当做数据库来用。
12,numChildren : znode子节点数量 -
元数据信息 ( 需要记住的 ) :
1 ,Zxid :事务 id ( zookeeper 的数据有点风吹草动,事务 id 就 +1 )
2 ,dataVersion : 数据版本号 ( 每次修改数据,这个版本号就 +1 )
3, dataLength : znode 的数据长度 ( 默认直达之 1M )