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可以作为保存数据的容器(如同文件),也可以作为保存其他节点的容器(如同目录 ...
随机推荐
- bootstrap快速入门笔记(三)响应式,行,列,偏移量,排序
一,响应式列重置 .clearfix <div class="row"> <div class="col-xs-6 col-sm-3"> ...
- Akka(1):Actor - 靠消息驱动的运算器
Akka是由各种角色和功能的Actor组成的,工作的主要原理是把一项大的计算任务分割成小环节,再按各环节的要求构建相应功能的Actor,然后把各环节的运算托付给相应的Actor去独立完成.Akka是个 ...
- 蓝桥杯-组素数-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- FTP中MLST概要解读---解决获取ftpFile为null的另外一种方式
零.引言 之前写FTP工具库,用的是ftp4j,他使用其他非常简单方便,但是在细节上提供的可选项比较少(当然也可能是我了解不够深刻) 最新的项目重写了FTP工具类,选择了apache net中的ftp ...
- JS中作用域
var scope = 'global'; var f = function() { console.log(scope); // 输出 undefined var scope = 'f'; } f( ...
- #使用parser获取图片信息,输出Python官网发布的会议时间、名称和地点。
# !/usr/bin/env/Python3 # - * - coding: utf-8 - * - from html.parser import HTMLParser import urllib ...
- linux统计多个文件大小总和
首先:查看当前文件夹大小的命令是: [root@host1 test]# du -sh 39M . 查看当前文件夹下所有文件的大小: [root@host1 test]# du -sh * 108K ...
- tomcat类加载体系
类加载,再来一发. 研究完java提供的类加载机制,再来看看tomcat开出了那些花. 最近开始读tomcat的源码,主线路当然是类加载机制,在这个过程中有豁然开朗的感觉.这一篇主要是自己的体会,而不 ...
- My-Blog搭建过程:如何让一个网站从零到可以上线访问
文章简述 5月13号的时候,上线了自己的个人博客网站:http://blog.hanshuai.xin,随后在平台上发布了一篇关于My-Blog的介绍博客<Docker+SpringBoot+M ...
- Android 桌面不显示应用图标
忽然有一天,运行自己的程序,发现桌面没有应用图标了. google了半天,也没什么发现. 最后发现是主Activity中: <action android:name="android. ...