【发布时间】:2016-04-20 07:47:37
【问题描述】:
Insert 和Delete 是在文件中间添加和删除一些数据的操作,文件大小会发生变化。
对于普通文本编辑器编辑的小文本文件,如记事本、vim、emacs,整个文本文件通过原子操作重写。具体来说,当编辑文本文件时,插入或删除一些内容(不是文件尾部),首先将文件头部到插入或删除数据的内容复制到一个新文件中;然后,复制插入的数据(删除操作省略此步骤);最后,从插入/删除位置到末尾的数据被复制到新文件中。
“插入”和“删除”是昂贵的操作,因为
普通文件系统不提供
insert或remove操作,这些操作会随着文件大小的变化而修改中间的文件内容。
当涉及到一个大文件时——这里指的是一个大小超过内存大小的文件,通常超过 10G 字节——如果仍然重写整个文件,成本会非常高。因此,拥有大文件的软件通常会自行处理对文件的修改。比如,
vmdk文件是VMware Workstation的虚拟文件系统排列的虚拟机镜像文件db文件是数据库文件,其数据由数据库的存储引擎操作
我的问题是这些“虚拟文件系统/存储引擎”如何有效地处理大文件中间的insert 和delete 操作,以避免密集的磁盘I/O?
欢迎任何相关材料或论文。
【问题讨论】:
标签: filesystems storage bigdata