读《数据库系统实现》来巩固数据库基础。 数据库三大要点:持久,查询,事务。这篇说事务。 事务的两大目标,一是「可恢复」,即通过日志保证数据库动作可恢复,二是「好并发」,即通过调度器保证事务正确的并发。 关于「可恢复」,要点是日志。日志分为三种,undo日志只存旧值,redo日志只存新值,undo/redo日志既存旧值又存新值。 关于「好并发」,要点是调度器。调度是来自一个或多个事务的读写动作的序列。最常用的方法是封锁。锁分为共享锁和排他锁。共享锁允许读不允许写,排他锁既不允许读也不允许写。 数据库对待并发的方法,与我们在编程语言中学到的是一样的大家都改同一个状态容易乱,那就通过调度,一个一个来。谁先来的,就让谁先改,这时把状态锁住,让其他人碰不到。 但如果大家都是仅仅要读,那倒可以大家一起来读,反正在这个情况下可以把状态视为只读状态,只读状态不存在并发问题,多少人一起读都不怕。这就是共享锁。 这时如果有谁要写,那其他人都不可以读了,要等他写完再读。这就是排他锁。 写的动作,是将世界从一个状态导向另一个状态,这个新状态,数据库有责任好好地保存,即使内存或磁盘出了问题,也能恢复。 防止内存出问题,我们使用日志;防止磁盘出问题,我们使用备份。 这就好比我们读书有了点心得,怕忘,就写笔记发到博客上,这就是日志;为避免博客网站抽风,我们将博文发到不止一个平台上,这就是备份。 这保证了数据不丢失,从而可以将内存中的状态恢复到正确的样子。 这就避免了学了忘,努力被湮没,狗熊掰棒子,西绪福斯推石头的悲剧。我们的每一个进步,都扎扎实实,牢牢靠靠,即使忘记,也能方便地找回来。我们成了更强大的人,不会一时懒散就回归孱弱。 我们的日志就是进步的轨迹,这份资料,如果别人拿去,也能亦步亦趋地,主从复制地,同样获得进步。当然,他的起点要和我们差不多。 但进步,也要一个点一个点来做,CPU切换上下文需要成本,人脑就更是,保持专注,才能进步效率最大化。 就像我们开启一个事务,一股脑做完许多事,再一起提交,这比反复开启事务提交事务效率要高很多。 但既然开启了事务,就意味着,其他的事务这时要等待,我的大脑,在这段时间,只对这个课题负责,别的一概不想,因为排他锁不允许并发。 能够用整块的时间进行学习和实践真是幸福的事情。 这一股脑事情做完了,事务就提交,自己就变到了新的状态,与此同时日志和备份也出现在适当的地方。 我学会了新的东西,有了进步,很开心,而且不用担心以后忘记,反正随时能恢复它。 本文转载于微信公众号: 安静的书桌(quiet_desk),更多微信文章请扫描关注公众号: |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|