正如经济政策的不可能三角“不可能同时实现资本流动自由,货币政策的独立性和汇率的稳定”那样,单机数据库也有一个不可能三角,那就是:①持久化 ②事务隔离 ③高性能,三者不可兼得。
首先,MySQL 选择了持久化:失去人性,失去很多;失去持久化,失去一切。没有持久化能力的核心数据库就做不了核心数据库,这一条是所有磁盘数据库的刚需,完全无法舍弃。
然后,MySQL 选择了一部分高性能:MyISAM 就是为了快速读写而创造的,早期 MySQL 在低配 PC 机上就有不错的性能。后来更高级的 InnoDB 出现了,小数据量时它的读取性能不如 MyISAM,写性能更是彻底拉胯,但是在面对大数据量场景时,读性能非常强,还能提供很多后端程序员梦寐以求的高级功能(例如丰富的索引),承担了大部分互联网核心数据库的角色。
最后,MySQL 将事务隔离拆成了几个级别,任君挑选:你要强事务隔离,性能就差;你能接受弱事务隔离,性能就强。你说无事务隔离?那你用 MySQL 干什么,Redis 它不香吗。
所以 MySQL 其实选择了 持久化*1 + 高性能*0.8 + 事务隔离*0.5,算下来,还赚了 0.3。
不过,从 MySQL 也可以看出,“数据库的不可能三角”并不是完全互斥的,是可以相互妥协的。
在开始细数分布式数据库之前,我们先看一个非分布式的数据库性能提升方案——读写分离,主从同步。
📙 高并发的哲学原理 《Philosophical Principles of High Concurrency》
Copyright © 2023 吕文翰