ojb*_*ass 8 filesystems hard-disk files
一个相当迟钝的性能瓶颈归结为这个非常小的查询。我做了一些实证分析,我认为我可能会受到磁盘缓存策略的影响。从根本上说(如果磁盘缓存被禁用)写入文件会比读取文件快、慢还是快?我认为答案将取决于碎片(和文件大小),但写入文件的操作必须额外查找下一个空闲块的位置,而不仅仅是跟随指向它的指针。
这取决于。这个问题没有普遍的答案。
在没有缓存的情况下,写入磁盘文件通常比读取慢得多。这与操作系统无关,而与硬件无关:硬盘和固态媒体的读取速度都比写入速度快。第二个因素与文件系统结构有关:读取只需要遍历目录树和块列表直到数据,然后读取数据,而写入需要执行相同的遍历,然后写入数据,然后更新一些元数据。
当缓存发挥作用时,事情就会发生变化。读取缓存中的数据非常快,但读取不在缓存中的数据必须从磁盘中获取。操作系统可能会尝试预测读取,但这仅适用于非常特定的情况(主要是从文件中顺序读取)。另一方面,只要数据量不是太大,写入就可以接近瞬时,因为数据只写入内存缓冲区。缓冲区最终必须写入磁盘,但到那时您的应用程序已经开始执行更多操作。
写作应该更快。
空闲块列表保存在内存中,因此找到下一个空闲块会非常快。除非您以同步模式写入,否则当您尝试写入某些内容时,它只会将数据复制到内核缓冲区并将写入排队;它不必等待 I/O 完成。
另一方面,读取必须等待 I/O 完成,因为调用者在数据到达之前无法执行任何操作。