2.2.3 Timestamp Oracle简称TSO,中心化授时方案,采用单时间源、单点授时实现全局时钟,用一个全局唯一的时间戳作为xid(全局事务id) 。
优点:
- 实现简单
- 单时间源单调递增,可以减少事务冲突
- 单点授时,性能会有瓶颈
- 不适合大规模集群部署
2.2.4 总结Spanner需要借助物理设备来实现,对其他开源数据库的参考价值并不大 。
其他无论采用HLC还是TSO,都有各自的优缺点 。
还有一种介于两者之间的授时方案,单时间源,多点授时,使用比较少 。3 HTAPHTAP英文全称是 Hybrid Transaction and Analytical Processing,即混合事务和分析处理,能够将事务处理(OLTP)和数据分析(OLAP)请求在同一个数据库系统中完成 。
HTAP需要在计算和存储两个层面支持OLTP和OLAP,存储是基础 。OLTP通常使用行式存储,OLAP则一般使用列式存储,差异很大 。HTAP解决这个差异的方式有两种:
- Google Spanner的PAX,一种新的融合性存储,即在行存储的基础上融合列存储的特点 。
- TiDB的思路,借助Raft协议在OLTP与OLAP之间异步复制数据,通过OLAP的特殊设计来弥补异步带来的数据不一致 。
4 RANGE动态分区下图有4条数据,

文章插图
如果按照HASH进行分片,一般会选择id作为key进行HASH计算,之后根据计算结果把数据分配到不同的分片中 。这样做的好处是实现简单,但也存在两个问题:
- 分片不具备业务属性,可能会存在业务热点访问的问题 。
- 分片规模变化时,迁移数据问题 。
Range动态分区用在NewSQL架构的分布式数据库中,一般具有下面的特性:
4.1 自动合并和拆分可以给分配的数据量设置阈值,当某个分片的数据量超过最大阈值时,可以自动拆分成2个分片,当分片数据量小于最小阈值时,进行分片合并 。
4.2 自动负载当某个分片上的热点数据较多时,节点访问压力会很大,系统可以自动地将这些热点数据访问调度到不同节点,以均衡访问压力 。
4.3 减少分布式事务分布式事务的开销会远远大于本地事务,分布式数据库可以把频繁参与同一个分布式事务的数据调度到同一个分片上,这样就避开了分布式事务 。
Spanner支持4.4 就近访问在全球部署的场景下,给用户分配最近节点的分片,可以减少访问延时 。
Spanner支持4.5 高可靠分布式数据库的高可靠是分区级别的高可靠,下图是OceanBase中一个Zone的架构图:

文章插图
OceanBase基于Paxos算法来实现系统的高可用,最小的粒度可以做到分区级别 。集群中数据的每一个分区会被保存到所有的Zone上,分区的多个副本采用Paxos协议进行日志同步 。每个分区和它的副本构成一个独立的Paxos复制组,其中一个分区为Leader,其它分区为Follower 。所有针对这个副本的写请求,都会自动路由到对应的主分区上进行 。主分区可以分布在不同的OBServer上,这样对于不同副本的写操作也会分布到不同的数据节点上,从而实现数据多点写入,提高系统性能 。
5 percalator模型分布式数据库是在BigTable基础上增加了分布式事务解决方案 。而Percolator模型就是Google提出的构建在BigTable之上的分布式事务解决方案 。参考2[2]
percalator模型采用了2阶段提交的思想,这里以银行汇款为例,账户1给账户2汇款100元,这2个账户位于不同的分区上 。
5.1 初始状态初始阶段,假如初始时账户1上有300元,账户2上有500元,如下图:

文章插图
上面表格中,":"前面是用时间戳表示的数据版本,后面是数据值 。第一列是表名,第二列的低版本保存了数据,第三列列保存了数据上加的锁 。第四列的高版本保存了指向保存数据版本的指针,比如6这个版本保存了指向了5这个版本数据的指针 6:data@5 。
推荐阅读
- 常用开源协议对比
- VLC Media Player:最棒的开源播放器
- Bootstrap5.0-全球流行的前端开源UI工具包迎来了大版本更新
- Cumulus Linux 开源交换系统
- openscap 免费开源的扫描工具
- 阿里开源的限流神器 Sentinel,轻松搞定接口限流
- 可视化Kafka
- 11 个可以部署在 Linux 服务器上的开源论坛软件
- 开源:API文档汇总管理工具Swagger Butler
- 值得现在就去尝试的四款开源聊天应用软件
