ZooKeeper的数据模型及其API支持以下九个基本操作:

操作 描述
create 在ZooKeeper命名空间的指定路径中创建一个znode
delete 从ZooKeeper命名空间的指定路径中删除一个znode
exists 检查路径中是否存在znode
getChildren 获取znode的子节点列表
getData 获取与znode相关的数据
setData 将数据设置/写入znode的数据字段
getACL 获取znode的访问控制列表(ACL)策略
setACL 在znode中设置访问控制列表(ACL)策略
sync 将客户端的znode视图与ZooKeeper同步

我们来使用ZooKeeper Java shell对上面中提到的ZooKeeper操作进行演示:

  1. ThisIsTheRootNode作为数据创建一个名为root的znode:
[zk: localhost(CONNECTED) 0] create /root "ThisIsTheRootNode"
Created /root
  1. 获取刚创建的root的znode的内容:
[zk: localhost(CONNECTED) 1] get /root
"ThisIsTheRootNode"
…… ……
…… ……
  1. ThisIsChild-1作为数据为root创建一个名为child-1的子节点:
[zk: localhost(CONNECTED) 2] create /root/child-1 "ThisIsChild-1"
Created /root/child-1
  1. ThisIsChild-2作为数据为root创建一个名为 child-2的子节点:
[zk: localhost(CONNECTED) 3] create /root/child-2 "ThisIsChild-2"
Created /root/child-2
  1. 列出root的子节点:
[zk: localhost(CONNECTED) 4] ls /root
[child-2, child-1]
  1. 获取root的访问控制列表:
[zk: localhost(CONNECTED) 5] getAcl /root
'world,'anyone
: cdrwa
  1. 由于root拥有2个子节点,所以不允许删除root:
[zk: localhost(CONNECTED) 6] delete /root
Node not empty: /root
  1. 删除子节点child-1
[zk: localhost(CONNECTED) 7] delete /root/child-1
  1. 删除子节点child-2
[zk: localhost(CONNECTED) 8] delete /root/child-2
  1. 列出root的内容:
[zk: localhost(CONNECTED) 9] ls2 /root
[]
…… ……
…… ……
  1. 删除root
[zk: localhost(CONNECTED) 10] delete /root

除了上述描述的操作外,ZooKeeper还支持使用称为multi的操作对znodes进行批量更新。 这将多个原始操作组合在一起成为一个单元。 一个multi操作本质上也是原子的,这意味着要么所有的更新成功,要么整个更新整个失败。

ZooKeeper不允许部分写入或读取znode数据。 设置znode的数据或读取时,znode的内容将被替换或完全读取。 ZooKeeper中的更新操作(如deletesetData操作)必须指定正在更新的znode的版本号。 版本号可以通过使用exists()方法调用来获得。 如果指定的版本号与znode中的版本号不匹配,则更新操作将失败。 另外,需要注意的另一件重要的事情是ZooKeeper中的更新是非阻塞(non-blocking)操作。

ZooKeeper中的读写操作如下图所示:

从前面的图片中,需要注意这些操作两个关键地方:

  • Read requests:这些在客户端当前连接的ZooKeeper服务器上进行局部处理
  • Write requests:这些被转发给领导者,并在生成响应之前通过多数协商一致

4. ZooKeeper 基本操作的更多相关文章

  1. zookeeper基本操作

    理解Zookeeper的一种方法是将他视为一个提供高可用性的文件系统.它没有文件和目录,但是有一个统一概念的节点,叫做znode,作为数据以及其他znode的容器.znode来自于一个层次级的命名空间 ...

  2. 转载:ZooKeeper Programmer's Guide(中文翻译)

    本文是为想要创建使用ZooKeeper协调服务优势的分布式应用的开发者准备的.本文包含理论信息和实践信息. 本指南的前四节对各种ZooKeeper概念进行较高层次的讨论.这些概念对于理解ZooKeep ...

  3. ZooKeeper程序员指南(转)

    译自http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html 1 简介 本文是为想要创建使用ZooKeeper协调服务优势的分布式 ...

  4. ZooKeeper学习第四期---构建ZooKeeper应用

    一.配置服务 配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那些公共的部分.简单地说,ZooKeeper可以作为一个具有高可用性的配置存储器,允许分布式应用的参与者检索和 ...

  5. zookeeper[1] (转)ZooKeeper Programmer's Guide(zookeeper编程向导)---中文

    原文:http://www.cnblogs.com/Xrinehart/p/3512509.html 本文是为想要创建使用ZooKeeper协调服务优势的分布式应用的开发者准备的.本文包含理论信息和实 ...

  6. 【Zookeeper系列】构建ZooKeeper应用(转)

    原文地址:https://www.cnblogs.com/sunddenly/p/4064992.html 一.配置服务 配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那 ...

  7. ZooKeeper系列 (4) 构建ZooKeeper应用

    原文地址: http://www.cnblogs.com/wuxl360/p/5817540.html 一.配置服务 配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那些公 ...

  8. ZooKeeper开发者指南(五)

    引言 这个文档是为了想利用ZooKeeper的协调服务来创建分布式应用的开发者提供的指南.它包括概念和实践的信息. 这个文档的一开始的的四部分呈现了不同ZooKeeper高级概念的的讨论.理解Zook ...

  9. zookeeper程序员指南

    1 简介本文是为想要创建使用ZooKeeper协调服务优势的分布式应用的开发者准备的.本文包含理论信息和实践信息.本指南的前四节对各种ZooKeeper概念进行较高层次的讨论.这些概念对于理解ZooK ...

随机推荐

  1. 【模板】AC自动机(加强版)

    题目描述 有个由小写字母组成的模式串以及一个文本串.每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串中出现的次数最多. 输入输出格式 输入格式: 输入含多组数据. 每组数据的第一行为一 ...

  2. Django的form表单之文件上传

    在生成input标签的时候可以指定input标签的类型为file类型 <!DOCTYPE html> <html lang="en"> <head&g ...

  3. JavaWeb(一)Servlet中乱码解决与转发和重定向的区别

    前言 前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一.request请求参数出现乱码问题 1.1.get请求 1)乱码示例 get请求的参数是在u ...

  4. JavaWeb(三)JSP概述

    一.JSP概述 1.1.JSP简介 一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束.JSP是一种Java servlet,主要用于实现 ...

  5. python之爬虫

    一.从网页爬下字符串清除特殊字符 import re def validateTitle(title): rstr = r"[\/\\\:\*\?\"\<\>\|\t] ...

  6. Java面向对象 IO (二)

     Java面向对象  IO   (二) 知识概要:               (1)字节流概述 (2)字节流复制图片 (3)IO流(读取键盘录入) (4)读取转换流,写入转换流 字节流概述   ...

  7. IDL 数组运算

    1.求大.求小和求余 IDL> arr=indgen(4) IDL> print,arr 0 1 2 3 IDL> print,arr>3 3 3 3 3 IDL> pr ...

  8. vue 实现 换一换 功能

    点击按钮列表页随机获取三个商品并渲染 后台返回的数据为 d为一个数组 数组 arr=[0,1,2]初始值 data:{ list:d, arr:[0,1,2] } 生产随机数 replace:func ...

  9. 动态IP解析

    本文介绍两种方便获取主机动态IP的方式(DDNS,IP报告网页),并给出相应的代码实现. shell脚本获取本机IP,执行上传操作和更新DNS操作.定期执行通过crontab或者systemd等服务. ...

  10. Jquery仿京东分类导航层简单实现

    <script src="/js/jquery-1.11.1.min.js" type="text/javascript"></script& ...