Filesystems 如何有效处理大文件中间的插入或删除? 代码>插入< /代码>和删除是在文件中间添加和删除一些数据的操作,文件的大小发生了变化。p>

Filesystems 如何有效处理大文件中间的插入或删除? 代码>插入< /代码>和删除是在文件中间添加和删除一些数据的操作,文件的大小发生了变化。p>,filesystems,storage,bigdata,Filesystems,Storage,Bigdata,对于由普通文本编辑器(如记事本、vim、emacs)编辑的小文本文件,整个文本文件由原子操作重写。具体地说,当编辑文本文件时,插入或删除某些内容(不是在文件的尾部),首先,将从文件头部插入或删除数据的内容复制到新文件中;然后,复制插入的数据(删除操作省略此步骤);最后,将插入/删除位置到末尾的数据复制到新文件中 “插入”和“删除”是昂贵的操作,因为 正常文件系统不提供“代码>插入INS/代码>或删除>代码>操作,修改文件大小在文件大小改变的中间。 当涉及到一个大文件(这里指的是一个大小超过内存大

对于由普通文本编辑器(如记事本、vim、emacs)编辑的小文本文件,整个文本文件由原子操作重写。具体地说,当编辑文本文件时,插入或删除某些内容(不是在文件的尾部),首先,将从文件头部插入或删除数据的内容复制到新文件中;然后,复制插入的数据(删除操作省略此步骤);最后,将插入/删除位置到末尾的数据复制到新文件中

“插入”和“删除”是昂贵的操作,因为

正常文件系统不提供“代码>插入INS/代码>或<代码>删除>代码>操作,修改文件大小在文件大小改变的中间。

当涉及到一个大文件(这里指的是一个大小超过内存大小的文件,通常超过10G字节)时,如果整个文件仍然被重写,成本将非常高。因此,拥有大文件的软件通常自己处理对文件的修改。比如,

  • vmdk
    文件是由VMware工作站的虚拟文件系统安排的虚拟机映像文件

  • db
    文件是数据库文件,其数据由数据库的存储引擎操作

  • 我的问题是<强>这些“虚拟文件系统/存储引擎”如何有效地处理大文件中间的<代码>插入< /代码>和<代码>删除>代码>操作,以避免密集磁盘I/O?< /强>


    欢迎提供相关资料或论文。

    我想知道是否有任何文件系统对插入/删除进行了特定优化。很多文件系统都没有特定的优化,所有新数据(从修改位置到结束)都会以顺序方式重新写入

    对于兼容性,文件系统只对文件提供一些基本操作,不包括代码> INSERT < /COD>或<代码> Debug 中间,文件编辑器或文件所有者必须对其进行优化。