终于有人说出心声了,MVCC到底该不该被我们彻底放弃呢?
- 问答
- 2026-01-11 06:28:16
- 4
(引用来源:知乎问题“终于有人说出心声了,MVCC到底该不该被我们彻底放弃呢?”下的高赞回答及讨论串)
终于有人说出心声了,MVCC到底该不该被我们彻底放弃呢?这个问题一抛出来,就像是在一堆看似平静的柴火堆里扔进了一根点燃的火柴,瞬间就引燃了无数开发者和技术从业者的讨论热情,说实话,看到这个标题,我第一反应是:“对啊!我也憋了好久想说了!”但同时心里又有个声音在问:“可是,放弃了它,我们又能用什么更好的东西来替代呢?”
MVCC,这个听起来有点高大上的词,其实我们可以把它理解成图书馆里的一种管理方式,想象一下,一个很多人同时在用的图书馆,如果没有MVCC,就像图书馆只有一本书,你想看这本书,就必须把它借走,在你归还之前,其他所有人都没法看,只能干等着,这效率太低了,尤其是在人很多的时候。
MVCC的做法是,图书馆为每个想看书的人都准备一份复印件,你来了,图书馆就给你一份当前最新版本的复印件,你可以安心地坐在角落里读,另一个人也可以来借走同一份资料的复印件去读,你们之间互不干扰,读写不会互相阻塞,整个图书馆的吞吐量一下子就上去了,当有人需要修改这本书的内容时(比如订正错别字),他会在后台创建一个新版本,等修改完成后,新来的读者拿到的就是新版本的复印件了,而之前已经在读老版本的读者依然可以读完他们手里的老版本,不会被强行打断,这听起来简直是完美方案,对吧?这也是为什么这么多数据库(比如MySQL的InnoDB、PostgreSQL等)把它当做核心法宝的原因,它极大地提高了并发性能,让系统在处理大量用户同时访问时依然能保持流畅。
但问题就出在,这个“完美方案”是有代价的,而且随着系统越来越复杂,这些代价变得越来越明显,这就是为什么有人会喊出“该不该放弃”的心声。

最让人头疼的就是“旧版本数据”的清理问题,也就是所谓的“垃圾回收”,还用图书馆的例子,每天都有无数人来借阅复印件,同时也有无数新版本被创建出来,那些已经没人读的老版本复印件,就需要有专门的清洁工(垃圾回收机制)来及时收走、粉碎掉,不然图书馆很快就会堆满废纸,空间被占满,管理也会变得异常混乱,在数据库里,这就是存储空间的压力,如果事务长时间不结束,或者垃圾回收跟不上数据变更的速度,数据库就可能越来越臃肿,性能反而会下降,这个清洁工本身也需要消耗CPU和IO资源,它可不是免费干活的。
是“一致性”的复杂性问题,MVCC提供了不同级别的“隔离性”,读已提交”和“可重复读”,这有点像你读复印件时的规则,在某些级别下,你可能会遇到一些“诡异”的现象,你在同一个事务里,第一次读和第二次读同一份数据,可能会读到不一样的内容(因为中间被别人修改并提交了新版本),或者更奇怪的是,你可能会突然读到一些原本不存在的“幻影”数据,虽然数据库通过一些机制(如快照隔离)尽力避免了大部分问题,但要完全理解这些行为,并在复杂的业务逻辑中不出错,对开发者来说是个不小的挑战,有时候为了数据绝对正确,我们不得不使用更严格的锁,这又部分抵消了MVCC带来的并发优势。
对于一些特殊的场景,MVCC的优势并不明显,甚至成了负担,大量数据更新、频繁的冲突写操作,想象一下,如果图书馆里大家都在争相修改同一本热门书的同一章节,系统就需要不断地创建新版本,处理版本冲突,这会带来巨大的开销,在这种情况下,传统的、更直接的加锁方式可能反而更简单、更高效。

回到核心问题:我们该彻底放弃MVCC吗?
从目前广泛的讨论来看,绝大多数人的心声并不是要“彻底抛弃”这个强大的工具,而是呼吁要“正视其缺点”和“寻找更优解或补充方案”,MVCC就像是一把锋利的瑞士军刀,它在处理高并发读、读写混合的场景下依然是无冕之王,彻底放弃它,无异于因噎废食。
大家的共识更像是:
- 不该放弃,但需优化: 数据库内核的开发者们一直在努力优化MVCC的实现,比如设计更高效的垃圾回收算法,减少存储空间占用和性能抖动,这是从根本上解决问题。
- 按需选用,而非万能: 作为使用者,我们需要更深刻地理解MVCC的优缺点,在设计系统时,要根据业务特点来选择,如果是读多写少、读写冲突不激烈的场景,MVCC是首选,如果是写密集型、强一致性要求极高的场景,或许可以考虑其他技术(如基于日志的结构合并树LSM-Tree的数据库,或者在某些操作上谨慎使用悲观锁)作为补充或替代。
- 工具是死的,人是活的: 最重要的还是使用工具的人,通过合理的设计,比如避免长事务、优化查询语句、控制事务粒度,可以最大限度地减少MVCC带来的副作用。
那句“终于有人说出心声了”,喊出的并不是对MVCC的彻底否定,而是一种集体的反思和期待,它反映了技术人在实践中遇到的真实痛点,也推动着整个行业去思考如何让我们的基础软件设施变得更好、更适应未来的挑战,放弃很简单,但改进和超越才是更值得走的路,MVCC远未到退出历史舞台的时候,但它确实需要我们更聪明、更审慎地去使用和打磨。
本文由瞿欣合于2026-01-11发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/78531.html
