数据库的MVCC模式
- PG的mvcc模式:多版本并发控制,通过在数据库中创建多个版本的数据来实现并发的读写操作。每个数据库事务都能够看到一个逻辑上一致的数据库快照,当一个事务修改了数据库中的数据时,他不会直接修改原始数据,而是创建一个新的数据版本,并将修改后的数据写入新的数据版本中,这样其他事务依然可以读取到旧的数据版本,不会被修改的事务所影响。 通过mvcc,pg可以并发的处理多个读写操作而不会发生冲突。当事务提交时,它的修改才会对其他事物可见。
- mysql的mvcc:在mysql中通过两个关键数据结构来实现:
A:undo Log(回滚日志):记录事务对数据的修改操作,在事务回滚时用于撤销已提交的修改。
B:Read View(读视图):每个事务开始时生成,用于控制每个事务能够看到数据版本。读视图用于记录事务开始时提交事务的ID,设置事务只能看到对应的数据版本。
总而言之,言而总之,就两句话:
读操作不会阻塞读操作:允许多个事务同时读取数据。
写操作不会阻塞读操作:读取未提交的数据副本,不必等到事务的提交操作。
写操作不会阻塞读操作:读取未提交的数据副本,不必等到事务的提交操作。
在一些特定问题下会带来一些问题,比如长事务的存在可能导致回滚段膨胀和占用过多的存储空间。在实际开发中需要根据实际业务需求和场景调整和优化MVCC的参数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通