分布式数据库总结

1       Distribution

一致性hash最主要是为了避免增加节点时数据的重分布

分布式事务:二阶段提交协议,最主要的问题在于维护失败故障恢复,以及悬挂事务的处,Oracle由主节点记录事务的最终提交日志。

多主集群主要涉及几个关键方面:

  • 数据的partition和replica策略:
  • 副本一致性或读写一致性
  • 故障恢复速度(HA方案)
  • 分布式事务处理:
    • 多主写的并发控制
    • 分布式读写的一致性
  • 分布式查询处理:减少网络代价
  • SQL的元数据同步
  • 算子下推
  • 分布式系统的运维、监控和管理

分布式数据库按照数据存储架构分:

  • l  Share disk:rac
  • l  Share nothing:bigtable,postgresql-xc
  • l  Share nothing+多副本:megastore,spanner

 

2       F1+Spanner

  • 数据的partition和replica策略
    • 以范围进行分区
    • 以directory为迁移单元
    • 以tablet为复制单元,包含多个directory,每个table上都有一个paxos状态机,同时Each state machine stores its metadata and log in its corresponding tablet,由paxos状态机来实现副本的一致性,只能在leader副本上进行写操作,读可以在任意一个up-to-date的副本上。所有副本的集合成为paxos group。
  • 多副本读写:在leader paxos group上进行更新,由paxos协议来保证副本间读写的一致性
  • 事务:支持分布式事务,二阶段提交
    • 读写冲突:支持mvcc
    • 写写冲突:由paxos group全局锁,在
    • 分布式读写一致性:由gps+原子钟来保证全局时序
    • 分布式事务协调器:在多个paxos group中选择一个paxos group作为事务管理器,事务管理器的状态也在paxos group内部进行复制
  • 故障恢复:热启动

 

3       Bigtable

  • l  日志:tabletserver记录日志
  • l  多副本读写:无
  • l  事务:单行数据库的ACID,hbase在单个region server上可支持事务
  • l  读写冲突:支持mvcc
  • l  增量存储方式:内存b+tree或物理b+tree
  • l  基线数据格式:物理b+tree
  • l  数据partition策略:range
  • l  故障恢复:冷启动,实例恢复
  • l  数据迁移:为了减少log日志的apply,进行两次minor compaction。其次将日志进行排序后分发,避免日志读取次数过多。
  • l  Chubby:master选主、root tablet位置、tablet server状态维护、schema信息
  • l  缺点:
    • u  不支持分布式事务
    • u  故障恢复为冷启动

4       megastore

  • l  事务:同一entity group内采用单阶段ACID事务,跨entity group的更新事务采用两阶段提交协议或异步消息实现。
  • l  日志:按照entity group记录日志
  • l  多副本:多个副本均可写,每次写的日志位置由一个Paxos实例来保证多副本日志的一致性,由副本的coordinator跟踪当前entity group的日志同步状态和数据状态,必要时在读取时apply 日志
  • l  读写冲突:支持mvcc,支持current读、snapshot读和inconsistent读
  • l  数据partition策略:range
  • l  副本迁移:
  • l  缺点:
    • u  在bigtable之上,通信代价过大
    • u  多副本均可写,导致写冲突严重,写性能不高

5      其他

postgresql-xc:支持全局锁和2pc,但没有副本

rac:多节点同时写,加global lock,cache fusion保证缓存一致性,MVCC保证分布式读写的一致性,半热半冷启动

Galera:本地采用乐观策略,之后广播到所有节点再做冲突检测

Oceanbase:b+树不支持range scan

你可能感兴趣的:(分布式数据库总结)