介绍几篇并发控制的工作(并发控制算法还有很多,这里也只是简单看了几篇):
- 《An Empirical Evaluation of In-Memory Multi-Version Concurrency Control》(VLDB 17’)实测了几种In-Memory MVCC机制。参见论文阅读 - InMemoryDB并发控制算法评估。
- 《An Evaluation of Distributed Concurrency Control》(VLDB17’)这篇主要是评估了分布式并发控制的机制。参见论文阅读 - 分布式并发控制算法评估、Calvin简介。
- 《High-Performance Concurrency Control Mechanisms for Main-Memory Databases》 (VLDB12’) Hekaton的并发控制详解。参见论文阅读 - Haketon的高性能并发控制算法、论文阅读 - Hekaton内存引擎。
前两个评估工作,都是学术圈的工作,介绍并评估了一些CC算法。但这两个工作都有个共同的不足:
不足1:只测试了serializable,但有很多场景用的是RC/RR/SI。
我记得Andy Polvo后来在SIGMOD(?)上开场还讲了一次说,学术界一直研究Serializable,但工业界实际上用RC/RR/SI更多。
不足2:有些测试结果分析不太透彻,说服力不足。
内存数据库上测CC的性能,很多问题很有可能会被其他模块的性能瓶颈掩盖。
相比之下,极致性能优化的Hekaton的CC算法测试和分析就硬实的多。
总结下来,几个硬实的结论:
- 单版本基于锁的CC虽然不需要维护多版本开销和GC开销,但是它并不能更好地适应各种类型的workload。MVCC已经成为TP数据库引擎标配。这一点基本上不需要质疑。
- 乐观CC在冲突少的情况下更优,但悲观CC的workload适应性更强,就我所知道的国内几个分布式产品,大都默认用悲观MVCC。例如TiDB后来的版本也引入和悲观MVCC。
扫描二维码,分享此文章