在以下情况的情况下,顺序写入和随机写入之间有什么区别

当应用程序写入某些内容并且需要在磁盘上修改信息/数据时,我们如何知道它是顺序写入还是随机写入。到目前为止,写入无法区分为“顺序”或“随机” .写入只是被缓冲,然后当我们刷新缓冲区时应用到磁盘。

如果我错了,请纠正我。

有帮助吗?

解决方案

当人们谈论 顺序的随机的 写入文件时,他们通常会区分无中间查找(“顺序”)和无中间查找的写入。查找-写入-查找-写入-查找-写入等模式。(“随机的”)。

这种区别在传统的基于磁盘的系统中非常重要,其中每次磁盘查找将花费大约 10 毫秒。将数据顺序写入同一磁盘每 MB 大约需要 30 毫秒。因此,如果顺序将 100MB 的数据写入磁盘,大约需要 3 秒。但如果你进行 100 次随机写入,每次 1MB,则总共需要 4 秒(实际写入 3 秒,所有查找 10ms*100 == 1 秒)。

随着每次随机写入变得越来越小,您为磁盘查找付出的代价也越来越大。在执行 1 亿次随机 1 字节写入的极端情况下,您仍然会为所有实际写入节省 3 秒的时间,但现在您有 11.57 天 值得寻求去做!很明显你的写入顺序与顺序写入的程度。随机性确实会影响完成任务所需的时间。

当涉及到闪存时,情况有点不同。使用闪存,您无需移动物理磁盘头。(这就是传统磁盘 10 毫秒寻道成本的来源)。然而,闪存设备往往具有较大的页面大小(根据数据,最小的“典型”页面大小约为 512 字节) 维基百科, ,4K 页面大小似乎也很常见)。因此,如果您写入少量字节,闪存仍然存在开销,因为您必须读出整个页面,修改正在写入的字节,然后写回整个页面。我不知道从我头顶闪过的特征数字。但经验法则是,在闪存上,如果每次写入的大小通常与设备的页面大小相当,那么随机写入和顺序写入之间不会有太大的性能差异。如果您的每次写入与设备页面大小相比都很小,那么在进行随机写入时您会看到一些开销。

现在,对于上述所有内容,确实在应用程序层有很多东西对您来说是隐藏的。内核、磁盘/闪存控制器等都有层。例如,这可能会在您的“顺序”写作中间插入不明显的搜索。但在大多数情况下,在应用程序层“看起来”顺序写入(无寻道,大量连续 I/O)将具有顺序写入性能,而在应用程序层“看起来”随机写入将具有(通常更差)随机写入性能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top