多结构化数据库复习

222 阅读4分钟

Memcached的一致性哈希算法

一致性hash算法主要用来解决服务器负载均衡的问题。

  1. 通过hash函数为每台服务器节点计算一个hash值,打在一个圆上面
  2. 用同样的方式为数据计算一个hash值,然后将数据存放到顺时针寻找到的第一台服务器节点上
  3. 采用虚拟节点的方式,抑制节点分布的不均匀性

DynamoDB对一致性hash算法的改进

由于虚拟节点位置和数量不固定,如果有新的节点加入,可能导致扫描所有节点上的所有数据对象,这样的开销非常大。

DynamoDB改进方式:固定虚拟节点的大小和位置,只改变虚拟节点和物理节点对应管理的方式。

因此每次加入新的物理节点时,会从每个现有节点中拿出一定的虚拟节点分给新节点,同时当有物理节点离开时,会将此节点的所有虚拟节点平均分给剩下的节点。

时钟向量更新算法

  1. 节点i本地发生一个事件时,将Vi[i]加1
  2. 节点i给节点j发送数据时,将Vi存放在消息内
  3. 节点j更新自己的时钟向量,Vj[k] = Math.max(Vi[k], Vj[k]),然后Vj[j]加1

NAS是如何读写数据的

  1. NAS客户端实现将I/O请求封装在TCP/IP报文中,通过网络传输到远程NAS服务器
  2. NAS服务器收到客户的后,会提取出报文中的I/O请求,然后进行I/O的读写操作
  3. 如果有数据需要返回,也是通过网络回传给客户端

NAS的优缺点

优点:部署简单、成本低、管理方便

缺点:数据存在安全性隐患、NAS的性能受限于网络传输能力,同时会增加网络的负载

OceanBase写数据的流程

OceanBase的写事务是集中在UpdateServer中的,UpdateServer总是先写内存表,当达到内存表的阈值后,会冻结内存表,再重新生成一个新的内存表向里面写数据,然后将冻结的内存表中的数据转换为紧凑的数据格式写到SSD中盘,最后将内存表回收掉。

BigTable基于日志的读写原理

检查请求是否合法,如果合法,就将写请求提交到日志中,然后将数据写到内存中的memtable,当超过memtable的上限时,会冻结memtable,然后创建一个新的memtable,然后将冻结的数据转化为SSTable形式持久化到GFS

GFS写数据的流程

  1. 客户端向Master节点请求带有租约的chunk服务器和其他副本所在的位置
  2. Master节点返回给客户端主Chunk服务器和其他副本的位置,客户端将这些信息缓存在本地。
  3. 客户端将数据传输到所有副本上
  4. 当所有副本都确认收到数据后,客户向主Chuck服务器发送写请求
  5. 主Chunk服务器将写请求传输到所有的二级副本
  6. 所有二级副本向主Chunk服务器发送确认
  7. 主Chunk服务器向客户发送确认或是错误

Storm的编程模型

storm分为流水线并行和多任务并行两种方式 Topology编程模型:一个计算被称为一个Topology,由多个Spout和Bolt组成,任务一旦提交将会一直运行。Spout从数据源获取发射Stream消息源组件,是Stream的发射器。Bolt是消息处理单元,用来执行过滤\聚合\查询操作。

Paxos算法

Paxos算法将系统中的角色分为:提议者(Proposer)、决策者(Acceptor)、学习者(Learner)三种 算法大致划分为2个阶段,准备阶段(prepare)和接受阶段(accept)

prepare阶段:

  1. Proposer生成一个提案编号n,然后向acceptors中的一个法定集合发送prepare请求
  2. acceptor获取prepare请求后,如果prepare请求中的提案编号n小于acceptor已经回复过的编号,则拒绝回复;如果prepare请求中的提案编号n大于acceptor已经回复过的编号,则返回上次接受过的提案,并且承诺不接受编号大于n的提案。 accept阶段:
  3. proposer收到了多数Acceptor对prepare的承诺后,就会向回复prepare请求的acceptor发送acceptor请求(编号n和value值)
  4. 如果acceptor收到一个编号为n的提案,如果n大于acceptor响应过的prepare请求编号,则acceptor会接受该提案,否则就拒绝该提案。