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可以作为保存数据的容器(如同文件),也可以作为保存其他节点的容器(如同目录 ...
随机推荐
- extern用法详解
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 另外,extern也可用来进行链接指定. 2 问题:ext ...
- Python生产环境部署(fastcgi,uwsgi)
Python部署web开发程序的几种方法 fastcgi ,通过flup模块来支持,在nginx里对应的配置指令是 fastcgi_pass http,nginx使用proxy_pass转发,这个要求 ...
- .NET Core 2.0体验
.NET Core 2.0预览版及.NET Standard 2.0 Preview 这个月也就要发布了. 具体相关信息可以查看之前的文章.NET Core 2.0及.NET Standard 2.0 ...
- ArcGIS 网络分析[2] 利用自定义基础数据创建网络数据集
前言 似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何"使用自己的数据"创建"网络数据集"的文章. 有介绍几何网络的,有介绍如何用官方SanFrancis ...
- arcgis属性选取like用法
查询对象为ArcInfo coverage,shapefile, INFO table,dBASE table,ArcSDE data,ArcIMS 要素类,或者 ArcIMS image servi ...
- JSP页面的静态包含和动态包含
JSP中有两种包含:静态包含:<%@include file="被包含页面"%>和动态包含:<jsp:include page="被包含页面" ...
- adesk上架实施--VDC详细配置(深信服论坛转)
1.建立独享桌面资源 1.1通过https://VDCIP:4430登录控制台,VDI设置-->资源管理-->新建独享桌面资源 1.2点击新建,独享桌面资源后显示如下界面 配置完后,往 ...
- PHP 底层的运行机制与原理 --转
发现一片总结的还不错的文章,记录一下 PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现 ...
- 安卓TextView限定行数最大值,点击按钮显示所有内容
问题展示 如上图所示,在普通的TextView中,要求: 最多显示3行 超过三行显示展开按钮 且点击展开按钮显示完整内容 这个需求看似简单,但解决起来会遇到两个较为棘手的问题:1,如何判断是否填满了前 ...
- 【CSS入门基础,有需要的看过来哦】心境,心静,不轻言放弃!---致CSS
整理一下近一周学习的有关CSS的基础知识笔记: CSS语法必须写在<style>标签中哦~/*注释*/ [CSS常用背景属性]background background-color:背景色 ...