在以下情况下,顺序写入和随机写入有什么区别:- 1)基于磁盘的系统 2)基于 SSD [闪存设备] 的系统
当应用程序写入某些内容并且需要在磁盘上修改信息/数据时,我们如何知道它是顺序写入还是随机写入。到目前为止,写入无法区分为“顺序”或“随机” .写入只是缓冲,然后在我们刷新缓冲区时应用到磁盘。
如果我错了,请纠正我。
在以下情况下,顺序写入和随机写入有什么区别:- 1)基于磁盘的系统 2)基于 SSD [闪存设备] 的系统
当应用程序写入某些内容并且需要在磁盘上修改信息/数据时,我们如何知道它是顺序写入还是随机写入。到目前为止,写入无法区分为“顺序”或“随机” .写入只是缓冲,然后在我们刷新缓冲区时应用到磁盘。
如果我错了,请纠正我。
当人们谈论对文件的顺序写入与随机写入时,他们通常会区分没有中间查找(“顺序”)的写入与查找-写入-查找-写入-查找-写入等模式。( “随机的”)。
这种区别在传统的基于磁盘的系统中非常重要,其中每次磁盘寻道大约需要 10 毫秒。将数据顺序写入同一个磁盘大约需要每 MB 30 毫秒。因此,如果您将 100MB 的数据顺序写入磁盘,大约需要 3 秒。但是,如果您执行 100 次 1MB 的随机写入,则总共需要 4 秒(实际写入 3 秒,所有搜索需要 10ms*100 == 1 秒)。
随着每次随机写入变小,您为磁盘寻道付出的代价也越来越大。在执行 1 亿次随机 1 字节写入的极端情况下,所有实际写入仍然需要 3 秒的净时间,但您现在有11.57 天的时间去做!很明显,您的写入顺序与随机程度会真正影响完成任务所需的时间。
在闪存方面,情况有点不同。使用闪存,您没有必须移动的物理磁盘磁头。(这是传统磁盘 10 毫秒寻道成本的来源)。但是,闪存设备往往具有较大的页面大小(根据维基百科,最小的“典型”页面大小约为 512 字节,并且 4K 页面大小似乎也很常见)。因此,如果您正在写入少量字节,闪存仍然存在开销,因为您必须读取整个页面,修改您正在写入的字节,然后再写回整个页面。我不知道我脑海中闪现的特征数字。但经验法则是,在闪存上,如果每次写入的大小通常与设备的页面大小相当,那么随机写入和顺序写入之间不会有太大的性能差异。如果与设备页面大小相比,您的每次写入都很小,那么在进行随机写入时您会看到一些开销。
现在对于上述所有内容,确实在应用程序层对您隐藏了很多。内核、磁盘/闪存控制器等中有一些层,例如可以在您的“顺序”写入过程中插入不明显的查找。但在大多数情况下,在应用程序层写入“看起来”顺序(没有搜索,大量连续 I/O)将具有顺序写入性能,而在应用层写入“看起来”随机将具有(通常更糟)随机写入性能。