2016-04-20 9 views
-1

InsertおよびDeleteは、ファイルのサイズを変更して、ファイルの途中でデータを追加および削除する操作です。大きなファイルの途中で挿入や削除を効率的に処理する方法は?

通常のテキストエディタ(メモ帳、vim、emacsなど)で編集された小さなテキストファイルの場合、テキストファイル全体がアトミック操作で書き換えられます。具体的には、ファイルの末尾ではなく一部のコンテンツをテキストファイルに挿入したり削除したりすると、まず、ファイルの先頭からデータの挿入や削除までのコンテンツが新しいファイルにコピーされます。挿入されたデータがコピーされます(削除操作ではこの手順は省略されます)。最後に、挿入/削除位置から最後までのデータが新しいファイルにコピーされます。

通常のファイルシステムが変更されたファイルのサイズが途中でファイルの内容を変更しinsertremove操作を提供していないので、

「挿入」と「削除」は、高価な操作です。

これは、通常、10Gバイトを超えるサイズのメモリを持つファイルを指します。ファイル全体がまだ書き換えられていれば、コストは非常に高くなります。したがって、大きなファイルを所有するソフトウェアは、通常、ファイル自体の変更を処理します。そのような

  1. vmdkファイル、VMware Workstationの

  2. dbファイルの仮想ファイルシステムによって配置された仮想マシンイメージファイルはデータベースファイルでありされ、そのデータは、データベースのストレージエンジンによって操作される

私の質問は、これらの「仮想ファイルシステム/ストレージエンジンは」効率的に処理する方法insertdelete集中的なディスクI/Oを避けるために、大きなファイルの途中での操作?

関連資料または論文は歓迎します。

答えて

-1

ファイルシステムに挿入/削除のための特定の最適化があるかどうかを知りたいと思うでしょう。ファイルシステムのAFAIKロットには特別な最適化がなく、すべての新しいデータ(変更の場所から最後まで)はすべて逐次的に書き直されます。

+0

互換性のために、ファイルシステムは、ファイルの基本的な操作をいくつか提供します。ファイルエディタやファイルの所有者は、自分自身で最適化する必要があります。 – foool

関連する問題