为什么MySQL要设计这么一套复杂的数据存取机制,要基于内存、日 志、磁盘上的数据文件来完成数据的读写呢?为什么对insert、update请求,不直接更新磁盘文件里的数据呢?
简单一句话总结,为什么不能直接更新磁盘上的数据,因为来一个请求就直接对磁盘文件进行随机读写,然后 更新磁盘文件里的数据,虽然技术上是可以做到的,但是那必然导致执行请求的性能极差。
因为磁盘随机读写的性能是最差的,所以直接更新磁盘文件,必然导致我们的数据库完全无法抗下任何一点点稍微高 并发一点的场景。 所以MySQL才设计了如此复杂的一套机制,通过内存里更新数据,然后写redo log以及事务提交,后台线程不定时刷 新内存里的数据到磁盘文件里 通过这种方式保证,你每个更新请求,尽量就是更新内存,然后顺序写日志文件。
更新内存的性能是极高的,然后顺序写磁盘上的日志文件的性能也是比较高的,因为顺序写磁盘文件,他的性能要远 高于随机读写磁盘文件。 也正是通过这套机制,才能让我们的MySQL数据库在较高配置的机器上,每秒可以抗下几千的读写请求。