问题由来
磁盘如果使用得当,磁盘的速度完全可以匹配上网络 的数据传输速度。目前的高性能磁盘,顺序写速度可以达到600MB/s, 超过了一般网卡的传输速度。但是磁盘随机写的速度只有大概100KB/s,和顺序写的性能相差6000倍!因为有如此巨大的速度差别,好的消息队列系统会比普通的消息队列系统速度快多个数量级。RocketMQ的消息用顺序写,保证了消息存储的速度。
那为什么说RocketMQ的消息用顺序写,保证了消息存储的速度?
顺序读写与随机读写和
连续 / 随机 I/O
连续 I/O :指的是本次 I/O 给出的初始扇区地址和上一次 I/O 的结束扇区地址是完全连续或者相隔不多的。反之,如果相差很大,则算作一次随机 I/O。
而发生随机I/O可能是因为磁盘碎片导致磁盘空间不连续,或者当前block空间小于文件大小导致的。
连续 I/O 比随机 I/O 效率高的原因是:在做连续 I/O 的时候,磁头几乎不用换道,或者换道的时间很短;而对于随机 I/O,如果这个 I/O 很多的话,会导致磁头不停地换道,造成效率的极大降低。
结论
要避免磁头的反复移动而导致的时间损失,即程序设计的时候都是尽量避免发生随机IO。
既然可以顺序IO,那么谁会去随机IO呢
参考
1、https://blog.csdn.net/u010087886/article/details/54405934
2、https://zhuanlan.zhihu.com/p/34895884