终于把分布式事务讲明白了!

本文详细介绍了Greenplum分布式事务的实现原理,包括事务的ACID属性、Write Ahead Logging (WAL)协议以及两阶段提交机制。文章通过分析不同存储介质的特性,探讨了数据库缓冲区管理策略,特别强调了WAL在事务持久性和原子性中的作用。此外,文章还讨论了Greenplum与PostgreSQL如何在分布式环境中应用两阶段提交,并提出了Greenplum的两阶段提交优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获得技术资料内容,请访问Greenplum中文社区网站

《深入浅出Greenplum内核》系列直播已经进行到第七场。错过活动的小伙伴可以前往Greenplum中文社区B站频道观看相关视频相关PPT均已上传Greenplum中文社区网站(cn.greenplum.org)的下载页面,欢迎获取!现在让我们通过这篇万字长文来回顾一下第七场活动《Greenplum分布式事务》精华内容。

事务处理是数据库系统的核心能力之一,在Greenplum等分布式数据库上实现更为复杂。本文将从四大块内容来为大家讲解Greenplum分布式事务:

  • 事务实现原理和Write Ahead Logging(WAL)

  • 分布式事务和两阶段提交的原理

  • Greenplum两阶段提交协议的实现

  • Greenplum两阶段提交协议的优化

一、事务实现原理和Write Ahead Logging(WAL)

事务处理是数据库管理系统的核心功能。数据库管理系统自诞生到现在已经发展了几十年,它能够在各行各业得到如此广泛的应用,一个非常重要的原因就是它提供了对事务的支持。事务是指对是数据库管理系统中的数据对象进行的一系列操作,通常是以begin transaction开始,以end transaction结束,中间包含了对数据对象的一些增删改查等操作。

事务的属性:ACID

那么事务有4个属性,通常被统称为ACID,在下面的表格里,中间栏分别列出了这4个属性的含义。右边栏列举了从数据库系统实现的角度来看,支持这4个属性常用的技术、方法或协议。

Jim Gray于1981年VLDB描述了事务的原子性、一致性和持久性,在此基础上,Haerder和Reuter在1983年中提出了事务的隔离性并提出术语“ACID”,自此,事务的ACID四个性质成为业内标准术语。

下图是一个典型的disk-oriented database的架构。这张图片来自数据库教科书《数据库系统实现》。还有一种数据库叫main-memory database,也就是主存数据库。

Disk-Oriented Database包括一些重要的模块或者子系统。

其中索引、文件、记录管理器也称为资源管理器,它的任务是管理各种数据库资源;缓冲区管理器主要负责管理缓冲区。需要注意一下的是,这里存在两个独立的缓冲区,分别是数据页的buffer pool和log文件的buffer。

存储管理器会负责从存储里面去获取数据页。事务的实现需要多个组件协同工作,事务管理器就负责协调调度、跟踪事务的各个执行阶段和状态;通过资源管理器以及日志和恢复模块,保证实物的原子性和持久性两个属性。并发控制模块会通过锁管理器等模块来保证事物的隔离性。

事存储介质的类型

接着我们再来了解一下数据库存储介质的类型,主要分为三大类。

  • 第一类是易失性存储器,包括CPU的寄存器,cache以及主存等。这些存储器的特点是当断电之后,上面的数据就丢失了。

  • 第二类存储器是非易失性存储器,包括Disk、SSD、NVM等。这类存储器的特点是如果断电了,对数据不会产生影响。

  • 还有一种是稳定存储器,理论上来讲是不可能被保证的,因为只要是物理存储介质都有被损坏的可能性,所以它只是一个概念上的存在。

下图描述了这些不同的存储介质的特点。我们可以看到,越靠近CPU,存储速度越快,容量越小,单位成本越高;越远离CPU在存储访问越慢,容量越大,单位成本越低。

不同硬件的特点会导致访问数据耗时的不均衡性。因此数据库的数据会尽量缓冲在一个buffer pool里进行操作,而不会直接去操作磁盘上的数据文件。

缓冲区Buffer Pool

我们再来了解一下缓冲区(buffer pool)。数据文件以一个个block/page组成,每个页面的大小为32K、64K字节,页面里存放着用户的数据,数据库启动时,buffer pool在内存中开辟一大块空间,按page组织和管理。

  • Input(page): 从磁盘里读page到buffer中去进行操作。

  • Output(page): page更新完毕,把buffer的page写回到磁盘中

  • Pin(page): 如果page被pin住,这个page将不被允许写回磁盘,pin是防止正在修改的数据页被刷到磁盘,加共享锁或者排他锁是为了并发控制。

  • Unpin(page): 操作和Pin相反

缓冲区管理策略

有了buff

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值