传统数据库的实现原理
“快照隔离级别(Snapshot Isolation)”和“多版本并发控制(Multi-VersionConcurrency Control,简称MVCC)”两种技术的大致含义是:为数据库中的数据维护多个版本号(即多个快照),当数据被修改的时候,可以利用不同的版本号区分出正在被修改的内容和修改之前的内容,以此实现对同一份数据的多个版本做并发访问,避免了经典实现中“锁”机制引发的读写冲突问题。
快照隔离级别(snapshot isolation)
OceanBase的隔离级别
OceanBase支持的隔离级别
MySQL Mode
读已提交(默认)
可重复读
Oracle Mode
读已提交(默认)
可串行化
隔离级别设置
事务级别
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
会话级别
ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
分布式数据库面临的挑战
和传统的数据库的单点全共享(即Shared-Everything)架构不同,OceanBase是一个原生的分布式架构,采用了多点无共享(即Shared-Nothing)的架构,在实现全局(跨机器)一致的快照隔离级别和多版本并发控制时会面临分布式
架构所带来的技术挑战
业界常用解决方案
分布式数据库应如何在全局(跨机器)范围内保证外部一致性,进而实现全局一致的快照隔离级别和多版本并发控制呢?大体来说,业界有两种实现方式:
利用特殊的硬件设备,如GPS和原子钟(Atomic Clock),使多台机器间的系统时钟保持高度一致,误差小到应用完全无法感知的程度。
版本号不再依赖各个机器自己的本地系统时钟,所有的数据库事务通过集中式的服务获取全局一致的版本号,由这个服务来保证版本号的单调向前。
OceanBase全局一致性快照技术
OceanBase数据库是利用一个集中式服务来提供全局一致的版本号
事务在修改数据或者查询数据的时候,无论请求源自哪台物理机器,都会从这个集中式的服务处获取版本号,OceanBase则保证所有的版本号单调向前并且和真实世界的时间顺序保持一致
GTS服务高可用
GTS是集群的核心,根据租户的级别不同采用不同的方式实现高可用
用户租户
OceanBase数据库使用租户级别内部表 __all_dummy的 leader 作为 GTS 服务提供者,时间来源于该leader的本地时钟。GTS 默认是三副本的,其高可用能力跟普通表的能力一样。
系统租户
使用 __all_core_table的leader作为GTS服务的提供者,高可用能力与普通表一样。时间戳正确性保证。
ob_timestamp_service :用于指定使用何种时间戳服务
GTS(默认)、LTS、HA_GTS
OceanBase全局一致性快照如何处理异常