大数据存储系统学习笔记(二)

1. Cassandra

  1. Cassandra可以看作是Dynamo和Bigtable的结合体

在这里插入图片描述

2. ZooKeeper

  1. 开源分布式协调系统,Hadoop/HBase环境的一部分

  2. 目前广泛应用于分布式系统对于master节点的容错,使用多台机器运行master节点,一台为主,其余为备份,当主master出现故障,某台备份可以成为主master

  3. 多个ZooKeeper维护一组共同的数据状态,支持分布式的读和写操作

  4. 2f+1个ZooKeeper节点可以容忍f个节点故障,仍然正确

  5. ZooKeeper 的数据模型: Data Tree

  6. client连接Zookeeper的两种方式:1.Synchronous:同步,Client发一个请求,阻塞等待响应;再发下个请求,再阻塞等下个响应,当请求个数很多时,同步操作就很慢。 2. Asynchronous:异步:允许Client发送多个请求,不需要阻塞等待请求完成,提供Callback函数,当请求完成时,Callback被调用

  7. ZooKeeper 系统结构:一个Leader,多个Follower

在这里插入图片描述

  • 所有节点都在内存中维持相同的ZooKeeper树:外存有snapshot+log,来提供crash recovery
  • 每个Client只连接到一台ZooKeeper服务器,所有的读操作都由这台服务器用其本地的状态来回复
  1. ZooKeeper保证: Linearizable writes:1. 写操作串行化 2. 因为写操作是Leader带领Follower按照相同顺序完成的

  2. ZooKeeper 保证: FIFO client order:每个Client自己的读写操作是按照FIFO的顺序发生的,但是,不同Client之间的读写顺序没有任何保证

  3. ZAB两个主要工作模式:1. 正常Broadcast Leader向Follower广播新的写操作,Leader向Follower广播新的写操作 2. 异常Recovery:竞争新的Leader,新的Leader进行恢复

3. JSON数据

  1. 基础类型:string, number, true/false, nullObject、Array
  2. JSON的数据类型定义是完全动态的,一个JSON记录本身自定义了自己的类型,不需要事先声明schema

4. Google Protocol Buffers

  1. Google推出,最初用于实现网络协议,所以叫protocol buffers
  2. 可以用于表达程序设计语言中的结构和数组,
  3. Google提供了一套软件库,可以把Protocol buffers的记录压缩编码,和解压缩解码,用于网络传输和存储
  4. 要求先定义类型,然后才可以表达数据

5. JSON vs. Google Protocol Buffers

  1. 相同点:
    • 都可以表达程序设计语言中的结构和数组
    • 嵌套:JSON object, PB message/group
    • 数组:JSON array, PB repeated
    • 缺值的情况:JSON记录实际上没有规定一定要有什么域,PB optional
  2. 不同点:
    • 数据类型:PB要求事先声明,JSON不需要
    • JSON数据设计的初衷是文本的。PB从设计开始就是二进制编码的,用于编码协议

6. mongoDB

在这里插入图片描述

  1. 基本不支持Join,可以用lookup实现类似Left outer join
  2. 与RDBMS(例如MySQL) 非常相似,采用Operator Tree进行执行
  3. BSON:一种JSON二进制表示:行式,key都是字符串,value根据具体的类型存储二进制值
  4. 后端可选存储引擎:WiredTiger(默认)等

7. 分布式 MongoDB

  1. Sharding = horizontal partitioning

在这里插入图片描述

  1. 没有分布式Join操作,Lookup是本地的

  2. 选择、投影、分组统计等可以在多个Shard上分布式执行

  3. 如果过滤条件中包括shard key,mongos会选择符合条件的shard(s)执行

  4. 只保证单个document(记录)修改的一致性,没有transaction概念

8. Neo4j

  1. 采用自定义的结构在本地硬盘存储图,而不是存在数据库关系型表中

  2. Neo4j存储:顶点:称为node,边:称为relationship,顶点和边上可以存储多个key‐value值:称为property

  3. 定义了transaction概念,在embedded Java中显式使用

  4. 采用类似snapshot isolation的机制,一个transaction的写先保存起来,直至transaction.finish()时,才真正尝试修改数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程哥哥吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值