ZooKeeper使用(4)-- ZooKeeper的数据模型
2017-07-02 10:25
211 查看
前面两篇文章《ZooKeeper的单机部署(Linux)》、《ZooKeeper的集群部署(Linux)》已经讲述了ZooKeeper集群的部署,接下来,在这边文章中,简单描述一下ZooKeeper中的数据模型,方便我们理解后面的内容。
我们来看一张图:
![](https://img-blog.csdn.net/20170702093059023?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaW5nZ29nb2dv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
ZooKeeper中的数据模型如上图所示,类似于一个带有层次结构的目录结构。层次结构中的每个节点都是一个ZNode,根节点路径为/,每个节点除了有个唯一路径进行标识外,每个节点都还有附带的数据内容和状态数据。
ZNode的操作具有原子性。ZNode上的数据都将被原子性的读写,读操作会读取该节点上的相关数据,而写操作会一次性的替换该节点上的所有数据。
ZooKeeper在设计之初,并不是用来作为常规的数据库或者大数据存储系统,而是用来管理和调度数据使用的,一般被管理的数据大小都不会太大,一般以KB为单位。ZooKeeper主要用于管理和调度分布式应用程序。
为了更直观的看看Zookeeper里面都有什么数据,我们在之前搭建好的集群上进行简单的实验。
我们创建一个节点/name,然后节点上附带的数据内容是我的名字“majing”,如下所示:
![](https://img-blog.csdn.net/20170702100811659?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaW5nZ29nb2dv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
从上面我们可以看出来,在使用get /name 命令获取节点数据的时候,同时还返回了其他一些状态数据。具体含义如下:
cZxid:该节点创建时的zxid;
ctime:该节点创建时间;
mZxid:该节点最近一次更新发生时的zxid;
mtime:该节点最近一次更新时间;
pZxid:该节点或者该节点子节点的最近一次更新发生的zxid;
cversion:其子节点的更新次数;
dataVersion:该节点数据内容的更新次数;
aclVersion:该节点ACL(授权信息)的更新次数;
ephemeralOwner:如果该节点为ephemeral节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是ephemeral节点, ephemeralOwner值为0;
datalength:该节点对应的数据内容的字节数;
numChildren:该节点的子节点个数;
ZooKeeper中的节点类型分为三种:
持久性节点(persistent):节点被创建以后会一直存在,直到被显示删除;
临时性节点(ephemeral):创建的节点时临时性的,如果创建该节点的Session没有了,那么该节点将会被自动删除;
关于ZkCli.sh中支持哪些zookeeper操作,如果不清楚的话,可以使用help命令进行查看,如下所示:
![](https://img-blog.csdn.net/20170702102210178?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaW5nZ29nb2dv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如果想了解我最新的博文,请关注我的博客或者专栏。如果想看到更多相关技术文章并愿意支持我继续写下去,欢迎给我打赏,对您的打赏我表示非常感谢。
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/tongue.gif)
![](https://img-blog.csdn.net/20170430151631454)
我们来看一张图:
ZooKeeper中的数据模型如上图所示,类似于一个带有层次结构的目录结构。层次结构中的每个节点都是一个ZNode,根节点路径为/,每个节点除了有个唯一路径进行标识外,每个节点都还有附带的数据内容和状态数据。
ZNode的操作具有原子性。ZNode上的数据都将被原子性的读写,读操作会读取该节点上的相关数据,而写操作会一次性的替换该节点上的所有数据。
ZooKeeper在设计之初,并不是用来作为常规的数据库或者大数据存储系统,而是用来管理和调度数据使用的,一般被管理的数据大小都不会太大,一般以KB为单位。ZooKeeper主要用于管理和调度分布式应用程序。
为了更直观的看看Zookeeper里面都有什么数据,我们在之前搭建好的集群上进行简单的实验。
我们创建一个节点/name,然后节点上附带的数据内容是我的名字“majing”,如下所示:
从上面我们可以看出来,在使用get /name 命令获取节点数据的时候,同时还返回了其他一些状态数据。具体含义如下:
cZxid:该节点创建时的zxid;
ctime:该节点创建时间;
mZxid:该节点最近一次更新发生时的zxid;
mtime:该节点最近一次更新时间;
pZxid:该节点或者该节点子节点的最近一次更新发生的zxid;
cversion:其子节点的更新次数;
dataVersion:该节点数据内容的更新次数;
aclVersion:该节点ACL(授权信息)的更新次数;
ephemeralOwner:如果该节点为ephemeral节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是ephemeral节点, ephemeralOwner值为0;
datalength:该节点对应的数据内容的字节数;
numChildren:该节点的子节点个数;
ZooKeeper中的节点类型分为三种:
持久性节点(persistent):节点被创建以后会一直存在,直到被显示删除;
临时性节点(ephemeral):创建的节点时临时性的,如果创建该节点的Session没有了,那么该节点将会被自动删除;
关于ZkCli.sh中支持哪些zookeeper操作,如果不清楚的话,可以使用help命令进行查看,如下所示:
如果想了解我最新的博文,请关注我的博客或者专栏。如果想看到更多相关技术文章并愿意支持我继续写下去,欢迎给我打赏,对您的打赏我表示非常感谢。
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/tongue.gif)
相关文章推荐
- Ajax.net使得服务器端的数据模型能够被javascript所使用
- 抛弃ResultSet,使用JSP中的.Net DataSet模型离线数据访问,拥抱Result!
- ASP.NET MVC3 实例(二) 使用 Entity Framework 创建实体数据模型
- 使用Linq取实体数据模型中值
- 使用ADO.NET 实体数据模型实现SQL存储过程调用
- Imode平台下使用原生数据创建3D模型_旋转
- django 单独使用数据模型
- ASP.NET MVC3 实例(二) 使用 Entity Framework 创建实体数据模型
- Katta如何使用Zookeeper-数据更新3
- Sencha Touch 2 官方文档翻译之 Using Models(使用数据模型)
- 使用Oracle网络数据模型的缺点
- Sharepoint2010应用开发三:使用客户端对象模型(Client Object Model)读取列表数据
- Setting the defaults for database access——使用createTables.php自动创建数据模型
- ASP.NET MVC3 实例(二) 使用 Entity Framework 创建实体数据模型
- ADO.NET Entity Framework 使用实体数据模型工具
- [原创]使用[后台数据更新模型]保存主从表数据
- 使用Contact数据模型来批量插入联系人(下)
- 使用ADO.net 实体数据模型遇到的问题
- 使用Contact数据模型来批量插入联系人(上)
- ZK框架简介,以及在ZK下使用JXL读取Excel模板,导出数据模型到Excel的方法