1.数据库的很多操作最终都是落实在存储引擎上的,存储引擎的性能直接决定了数据库的性能;
2.不管是内存型的存储引擎还是磁盘型的存储引擎,或者其它什么NoSQL数据库,只要有一点通用性,不是为了解决某一个极其特定的问题而设计的数据库,都是需要持久化机制的,你可以看到,就算是内存型数据库Redis,也是提供持久化功能的,因为非易失的内存现在没有流行起来。你能放心只把数据放在易失存储器中吗?如果银行用了你的数据库存储用户的资金数据,一个停电就可以让所有用户的资金数据全部丢失,你不感觉到害怕吗?你能保证你的机器永远不出问题不关机吗?就算可以,维护起来也很麻烦,要是什么程序来个内存泄露又找不到问题,你又不能重启,挺憋屈的,这就要求其它软件的设计要很好,因为留给其它程序的余地已经小了。
3.磁盘在整体读写性能,和随机读写性能上,和内存有3-5个数量级的差距,而且这个差距在短时间内没办法缩小,你不去解决,性能会很差的。
『IO是数据库的一个很大的瓶颈』这种说法,本质上是因为数据库性能要求与稳定性要求之间的矛盾,数据库不是一般的应用软件,它要求的不是简单的性能高,而是在超级稳定(你能想到的所有意外情况下,数据库内的数据都不能出现1bit的偏差)的情况下性能高,为了这一点,必须使用磁盘,那么就需要承认使用磁盘对性能的不利影响,这是对立,单纯的高性能或单纯的稳定对数据库来说是无意义的,高性能和稳定在数据库内相互依存,这是统一。
在这种情况下,既承认使用磁盘会给性能带来影响,又不肯放弃使用磁盘,那么只能尽量克服磁盘给性能带来的负面影响了。但凡磁盘没有性能问题,亦或者是可以放弃使用磁盘,都不会有这样的局面,所以磁盘IO是数据库的一个很大瓶颈。
这就好比周围唯一一座有资源的山上有两只老虎,每只老虎都容不下对方,又没有哪一方要离开,那就只能打架,这就是我们所谓的"一山不容二虎"。那么打架的结果,肯定是实力弱,好欺负的那只老虎挨揍。铁拳总是砸在它脸上,总是它先屈服。这里也是一样的,对于数据库内核开发者来说,相比断电无法保存数据但性能高的内存,断电可以保存数据但是性能差的磁盘就是那只较弱,较容易欺负的老虎,毕竟数据库内核开发者不可能让易失性存储器活生生地变成非易失存储器,那是存储硬件工程师的任务和工作,但是数据库内核开发者能够通过优化数据结构和持久化机制设计来提升磁盘的读写性能,所以就说磁盘IO是瓶颈,可以改变的才叫瓶颈,没法改变的怎么叫瓶颈嘛!那叫缺陷!
不过当非易失的内存硬件流行开后,这种性能比肩内存,又和磁盘一样都是非易失存储器,就会使这种说法就站不住脚了。硬盘IO就不是数据库的瓶颈了,因为高性能和稳定的矛盾转化成了其它形式,数据库不用磁盘了,我们的目光会聚焦在如何优化非易失内存的缺点带来的问题上。
0 留言