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数据模型的更多相关文章

  1. Zookeeper数据模型及其应用

    Zookeeper作为分布式系统的底层协调服务有着其简单可依靠的数据模型,数据模型加之数据同步.一致性处理和可靠性,在此之上有很多经典的应用,例如,分布式锁.服务器动态上线下感知.主节点选举.数据发布 ...

  2. 3.Apache ZooKeeper数据模型

    1. ZooKeeper自下向上的服务视图 Apache ZooKeeper是分布式应用程序的协调服务. 它旨在解决分布式应用程序中与组件协调相关的棘手问题. 它通过暴露一个简单而强大的接口来实现这一 ...

  3. zookeeper系列之十—zookeeper数据模型

    团队博客:http://rdc.taobao.com/team/jm/archives/tag/zookeeper <ZooKeeper快速搭建>http://nileader.blog. ...

  4. zookeeper系列之九—zookeeper数据模型

    http://nileader.blog.51cto.com/1381108/946788 本文主要讲述了Zookeeper的数据模型,包括Zookeeper的数据视图,节点的层次结构以及节点类型等基 ...

  5. ZooKeeper 数据模型

    本文主要讲述ZooKeeper的数据模型,包括ZooKeeper的数据视图,节点的层次结构以及节点类型等基本属性.Zookeeper的视图结构类似标准的Unix文件系统,但是没有引入文件系统相关概念: ...

  6. 【4】Zookeeper数据模型

    一.Znode节点是什么 1.1.概念   Znode节点是Zookeeper中数据模型中最小的数据单元.Zookeeper的数据模型是一颗树,由"/"进行分割路径.每个znode ...

  7. ZooKeeper 数据模型:节点的特性与应用

    zk的基础知识基本分为三大模块 数据模型 ACL 权限控制 Watch 监控 数据模型 默认配置文件 # The number of milliseconds of each tick tickTim ...

  8. 【转载】zookeeper数据模型

    [转载请注明作者和原文链接,  如有谬误, 欢迎在评论中指正. ] ZooKeeper的数据结构, 与普通的文件系统极为类似. 见下图: 图片引用自developerworks 图中的每个节点称为一个 ...

  9. ZooKeeper入门(三) ZooKeeper数据模型

    1 简述 ZooKeeper可以看成一种高可用性的文件系统,但是,它没有文件和目录,而是使用节点,称为znode. znode可以作为保存数据的容器(如同文件),也可以作为保存其他节点的容器(如同目录 ...

随机推荐

  1. 2017-4-26 winform 菜单和工具栏

    如何让radiobutton进行分组: 用Panel    相当于div 菜单和工具栏: MenuStrip(菜单条) ShortcutKeys-------------------------与菜单 ...

  2. Java中遍历Map的常用方法

    以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等): 方式一(推荐): // 推荐 // 在for-each循环中使用entr ...

  3. Laravel5中Cookie的使用

    今天在Laravel框架中使用Cookie的时候,碰到了点问题,自己被迷糊折腾了半多小时.期间研究了Cookie的实现类,也在网站找了许多的资料,包括问答.发现并没有解决问题.网上的答案都是互相抄袭, ...

  4. 音频特征提取——librosa工具包使用

    作者:桂. 时间:2017-05-06  11:20:47 链接:http://www.cnblogs.com/xingshansi/p/6816308.html 前言 本文主要记录librosa工具 ...

  5. zen coding一个牛的不行的html和css开发工具

    zen coding 是一种仿css选择器的语法来快速开发html和css的开源项目.现已更名为Emmet.可以到github上下载拜读.在这个都想偷懒的世界里,此方法可以极大的缩短开发人员的开发时间 ...

  6. MySQL监听数据库存储过程出现异常

    DELIMITER $$ DROP PROCEDURE IF EXISTS `proc_ordertourist_cancel`$$ CREATE PROCEDURE proc_ordertouris ...

  7. JAVA中的Buffer

    一.属性 Buffer有四个基本属性: 1.capacity  容量,buffer能够容纳的最大元素数目,在Buffer创建时设定并不能更改 2.limit buffer中有效位置数目,不能对超过li ...

  8. Android 开发—— 小工具,大效率

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:姚志锋 一.Hugo插件 -- 打印方法运行时间 首先申明下,此Hugo非 彼Hugo(Hugo是由Go ...

  9. JAVA – 虚函数、抽象函数、抽象类、接口

     本文转载地址:http://blog.csdn.net/trojanpizza/article/details/6556604 1. Java虚函数 虚函数的存在是为了多态. C++中普通成员函数加 ...

  10. Bash Excercises

    1. cat <<EOF #!/bin/bash function printHelp { cat<<EOF Run the Dash vector tests. Usage: ...