在Linux下的高性能设置(许多并发更新)中,这是更新磁盘上30k文件的最有效方法:
1.简单地更新相应的文件
2.删除旧文件并保存新文件
我主要关心磁盘访问时间,但是处理器负载也可能是一个因素。
您正在使用的磁盘子系统和文件系统将在这里产生巨大的影响。 事实上有很多不同的可能的结果,你可能应该基准。 但是:
所以适当的硬件(真正的RAID控制器与WBcaching,固态硬盘),适当的软件(现代文件系统,ext3是绝对不可能的问题,我会用xfs,但ext4是一个选项)和适当的调整(testing各种内核IO调度,IO尺寸等设置)会产生巨大的影响。
如果你正在更新它,那么文件内容陈旧不可能是你的问题。 如果是这样,请将其粘贴在tmpfs上,在更新时截断文件并重新写入。 这将是最便宜的方法,因为根本不可能使用磁盘。
第二个最接近的方法是截断/写入一个文件系统,该文件系统的noatime安装选项已设置,日志closures。 但是,如果你崩溃了,那么它又冒险,因为你可能会丢失数据。
之后,它再次无法接通。
请记住,linux缓冲区以确定的时间间隔写入和同步到磁盘,所以你通常不会从I / O的angular度“感受”写入的影响(除非它的写入非常繁重,但可以调整)。 您可以更改条件以同步到磁盘,以便在同步到磁盘之前可以长时间填写写入缓冲区。
如果你做了一些非常聪明的事情,使用fallocate预先分配文件的空间,这将是其最大的可能值。 然后,mmap打开文件直接读取到内存。 然后重写将近瞬时(但是如果你有电力损失是有损的)。 然后您可以通过msync调用来控制何时刷新到磁盘。
假设一个FLAT文件,而不是一个数据库文件,优点和缺点两种方法真的:
如果您只是简单地覆盖文件的内容,那么您肯定会阻止重新分配步骤。 所以你可以在那里省点时间。 但是,这些部分的放置可能不是最佳的。
根据磁盘的碎片情况,您可能会获得更优化的数据位置。 但是,如果空间必须分配,那么速度会稍慢一些,如果您运行的是更安全的设置,那么在分配之前将会有足够的时间来清空块。