ZooKeeper数据模型
ZooKeeper有一个分层的命名空间,类似分布式文件系统。它们唯一的区别就在于在命名空间中每个节点可以有数据关联作为它们的子节点。这就像有一个文件系统允许文件也作为文件目录。节点路径通常表示为规范的、斜杠分隔的绝对路径。它们没有相对路径。任何包含在路径当中的unicode字符都必须遵循以下约束:
1)空字符不能作为路径名称;
2)以下字符串不能作为使用,这是优越它们显示不够友好,或容易引起混淆(\u0001 - \u001F and \u007F - \u009F)
3)以下字符串是不允许的。( \ud800 - uF8FF, \uFFF0 - uFFFF)
4)"."字符可以作为名称的一部分,但是"."和".."不能单独存在用于表示一个节点的路径,因为ZooKeeper没有使用相对路径。下述例子是无效的"/a/b/./c" or "/a/b/../c"
5)"zookeeper"关键字保留
ZNodes
在ZooKeeper树形结构中的每个节点都可以称为znode。Znodes维护一个状态数据结构,包含数据变更版本号、ACL变更以及时间戳。版本号加上时间戳可以允许ZooKeeper去进行缓存换证和协调更新。每当一个znode的数据变更,版本号会往上加。比如每当客户端接收数据时,它也会接收到这个数据的版本。同时当客户端执行更新或删除操作时,它必须提供正在变化的znode节点的数据版本。如果znode提供的版本号不符合当前数据的实际版本号,更新将会失败。
注意:
在一个分布式应用工程中,单词node可以认为是单一主机、一个服务器、一个整体的其中某个成员,一个客户端处理器等等。在ZooKeeper文档中,znodes被认为是数据节点。Servers被认为是组成ZooKeeper服务的主机。quorum peers被认为是组成一个整体的服务端,clients被认为是正在使用ZooKeeper服务的一个主机或者是一个进程。
Znodes是程序员访问的主要实体。它们有很多特性值得我们了解的:
Watches(监听器)
客户端可以在znodes进行监听。znode的变化会触发这个监听器然后清除它。当一个监听器被触发的时候,ZooKeeper会给客户端发送一个通知。
Data Access(数据访问)
在命名空间当中存储在znode当中的数据是原子读或写的。读操作将会读取znode关联的所有数据字节,写操作将会替换所有数据。每个节点有Access Control List (ACL)数据访问列表用于限制谁可以做什么。
ZooKeeper不是设计用于作为数据库或者大对象存储的,相反的他是用来管理协调数据的。数据的来源形式可以是配置信息、状态信息、地区信息等等。不同形式的协调数据的通用属性是他们都相对比较小,控制在KB字节。ZooKeeper客户端和服务端都有合理性检查以保证znodes小于1M数据,但是数据可以远远小于这个平均值。在相对比较大的数据进行操作将会导致操作花费的时间较长,从而影响到其他操作的延迟,因为这额外的时间需要通过网络或者存储介质进行数据的迁移。如果大数据的存储是必须的,通常处理这种数据的方式是保持在大存储系统中,如NFS或者HDFS,然后在ZooKeeper中存储指向数据存储位置的指针。
Ephemeral Nodes(临时节点)
ZooKeeper有临时节点的概念。只要创建节点的会话还处于活跃状态,那这些节点还是存在的,当会话关闭时,这些节点也会被删除。因为这个行为所以临时节点不允许有子节点。
Sequence Nodes -- Unique Naming(序列节点-独特命名)
当创建一个节点的时候你可以请求ZooKeeper在路径末尾增加一个单调递增的计数器。这个计数器对这个父节点是唯一的。计数器的格式是%010d (10进制用0填充),格式化以便用于简单排序。例如"<path>0000000001"。查看Queue Recipe 有一个例子用了这个特性。注意:这个用于存储下一个序列号的计数器是一个被父节点维护的有符号的int。这个计数器当递增超过2147483647 会溢出(结果应该是"<path>-2147483647")。
ZooKeeper数据模型的更多相关文章
- Zookeeper数据模型及其应用
Zookeeper作为分布式系统的底层协调服务有着其简单可依靠的数据模型,数据模型加之数据同步.一致性处理和可靠性,在此之上有很多经典的应用,例如,分布式锁.服务器动态上线下感知.主节点选举.数据发布 ...
- 3.Apache ZooKeeper数据模型
1. ZooKeeper自下向上的服务视图 Apache ZooKeeper是分布式应用程序的协调服务. 它旨在解决分布式应用程序中与组件协调相关的棘手问题. 它通过暴露一个简单而强大的接口来实现这一 ...
- zookeeper系列之十—zookeeper数据模型
团队博客:http://rdc.taobao.com/team/jm/archives/tag/zookeeper <ZooKeeper快速搭建>http://nileader.blog. ...
- zookeeper系列之九—zookeeper数据模型
http://nileader.blog.51cto.com/1381108/946788 本文主要讲述了Zookeeper的数据模型,包括Zookeeper的数据视图,节点的层次结构以及节点类型等基 ...
- ZooKeeper 数据模型
本文主要讲述ZooKeeper的数据模型,包括ZooKeeper的数据视图,节点的层次结构以及节点类型等基本属性.Zookeeper的视图结构类似标准的Unix文件系统,但是没有引入文件系统相关概念: ...
- 【4】Zookeeper数据模型
一.Znode节点是什么 1.1.概念 Znode节点是Zookeeper中数据模型中最小的数据单元.Zookeeper的数据模型是一颗树,由"/"进行分割路径.每个znode ...
- ZooKeeper 数据模型:节点的特性与应用
zk的基础知识基本分为三大模块 数据模型 ACL 权限控制 Watch 监控 数据模型 默认配置文件 # The number of milliseconds of each tick tickTim ...
- 【转载】zookeeper数据模型
[转载请注明作者和原文链接, 如有谬误, 欢迎在评论中指正. ] ZooKeeper的数据结构, 与普通的文件系统极为类似. 见下图: 图片引用自developerworks 图中的每个节点称为一个 ...
- ZooKeeper入门(三) ZooKeeper数据模型
1 简述 ZooKeeper可以看成一种高可用性的文件系统,但是,它没有文件和目录,而是使用节点,称为znode. znode可以作为保存数据的容器(如同文件),也可以作为保存其他节点的容器(如同目录 ...
随机推荐
- CSS的position/float/display
一.position position属性取值:static(默认).relative.absolute.fixed.inherit. postision:static:始终处于文档流给予的位置.它可 ...
- 关于mysql表中有大文本limit慢的优化
问题场景: 商品表goods,里面有几个大文本字段,类型用的MediumText,表中记录28万多.分页查询时用limit,在一般PC上需要12秒左右,这个数量级的数据不应该这么慢. 原因分析: 几个 ...
- 【JavaScript】让事件支持先发布后订阅
之前写过一个的事件管理器,就是普通的先订阅后发布模式.但实际场景中我们需要做到后订阅的也能收到发布的消息.比如我们关注微信公众号,还是能看到历史消息的.类似于qq离线消息,我先发给你,你登录了就能收到 ...
- 中美HTML5市场发展的简单对比
1. HTML5的中美发展与应用对比 2014年下半年,HTML5在中国火了.个人用它开展自媒体,散播鸡汤:广告公司靠它做市场营销,从中获利:还有大公司的广告部.企业新媒体部或转型的媒体,利用它进行各 ...
- IOS对话框UIAlertView
//修改弹出对话框的样式 alertView.alertViewStyle = UIAlertViewStylePlainTextInput; //根据索引获取指定的某个文本框 [alertView ...
- IOS的UITableView
UITableView 概述 UITableView 一般用来展示表格数据.可以滚动(继承自UIScrollView).性能极佳 UITableView分两种样式: Plain,不分组的样式 Grou ...
- KafKa介绍(分布式架构)
介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以to ...
- 透过 Delphi 使用二进位金钥做 AES 加密.
从 1994 年开始,笔者就开始接触加密与网路安全的世界,从鲁立忠老师的指导当中获益良多,后来在台湾的元智大学就读研究所的时候,也以此为研究主题. 在当时,电子商务是显学,Visa跟 Master C ...
- php 关于经纬度距离计算方法 成功版
1.PHP实现通过经纬度计算距离 单位为公里 function getdistance($lng1,$lat1,$lng2,$lat2)//根据经纬度计算距离 { //将角度转为狐度 $radLat ...
- C#中设置TextBox控件中仅可以输入数字且设置上限
首先设置只可以输入数字: 首先设置TextBox控件的KeyPress事件:当用户按下的键盘的键不在数字位的话,就禁止输入 private void textBox1_KeyPress(object ...