1
framlog 2018-01-29 16:10:29 +08:00
可以那样做的。不过一般都是 os 自己管理 buffer,不是存储系统也没必要用 direct io
|
2
Mirana 2018-01-29 16:26:06 +08:00
每个文件 fd 都关联一个当前的 offset,每次写入 offset 都会更新,顺序写入就是所有的写都是写当前的 offset,随机写就是你 offset 会从[0~max]里随机取值写,这些随机的 offset 最后都可能会导致磁头的移动
对于磁盘性能优化当然是顺序写比随机写要好,不过文件系统层和块设备层,每层都会对写入做优化,这些优化对于上层来说是不可见的 优化当然要做,因为你并不能确定你的程序跑在什么环境下,比如什么文件系统,什么磁盘上 所以我的结论就是做自己的优化,让别人逼逼把 |
3
fcten 2018-01-29 16:32:05 +08:00
没有必要。
一次性写入大量数据会导致 IO 阻塞,引入不必要的复杂逻辑。 应用程序自己做 IO 缓存,一旦程序崩溃,缓存里的数据都会丢失。 操作系统本身就对磁盘读写有缓存,并且只要机器不断电就不会丢失。 写日志这种场景,有了数据就写,无需优化。不存在随机写入问题。 即使真的遇到了随机写入的问题,上个 SSD 就好了…… |
4
roychan 2018-01-29 17:17:10 +08:00 via iPhone
可以看看 log-structured file system 相关的东西。
|
5
enenaaa 2018-01-29 17:19:27 +08:00
os 的文件系统有自己的管理方式,按页管理的,如果磁盘容量紧张,你提前申请 100M 在物理上也不一定是连续的一块。如果磁盘容量剩余较多,那多次写入也可能在同一块。
所以, 如果不是数据库这样的底层软件, 没太多必要操心这个。 当然,把多次小数据汇总成一次写入, 效率上是有提升的。 |
6
billlee 2018-01-29 22:00:36 +08:00
LSM tree, 参见 leveldb.
|