コンパクション (コンパクション) とは | 意味や読み方など丁寧でわかりやすい用語解説

作成日: 更新日:

コンパクション (コンパクション) の読み方

日本語表記

圧縮 (アッシュク)

英語表記

compaction (コンパクション)

コンパクション (コンパクション) の意味や用語解説

コンパクションとは、コンピュータシステムにおいて、データやメモリの断片化を解消し、リソースの利用効率やパフォーマンスを向上させるために行われる処理の総称である。日本語では「圧縮」や「詰め合わせ」と訳されることもあるが、単にデータを小さくする圧縮とは異なり、散在しているデータや空き領域を整理・統合して連続した状態にすることを主目的とする。この処理は、メモリ管理、ストレージシステム、データベースなど、ITの様々な分野で重要な役割を担っている。コンパクションが必要となる背景には、断片化、すなわちフラグメンテーションという現象が存在する。コンピュータのメモリやストレージでは、データの書き込み、更新、削除が頻繁に繰り返される。この過程で、使用中の領域の間に、利用されていない小さな空き領域が点在するようになる。これが断片化である。断片化が進行すると、合計の空き容量は十分にあるにもかかわらず、連続した大きな領域を確保できなくなり、新たなデータの格納やプロセスの実行に支障をきたすことがある。また、ストレージ上ではデータが物理的に分散するため、読み書きの際に余分な探索時間が発生し、アクセス速度の低下を招く。コンパクションは、こうした断片化によって生じる問題を解決するための基本的な手法である。 コンパクションの具体的な動作は、適用される対象によって異なる。まず、主記憶装置であるメモリの管理におけるコンパクションについて解説する。オペレーティングシステムは、複数のプロセスにメモリ空間を割り当て、解放する役割を担う。プロセスが起動と終了を繰り返すうち、メモリ上には使用中の領域と解放された空き領域が混在するようになる。このとき発生する断片化は外部断片化と呼ばれる。この状態では、個々の空き領域が小さすぎて、要求されたサイズのメモリを確保できない場合がある。メモリコンパクションは、この問題を解決するために、使用中のメモリブロックを物理的にメモリの一方へ移動させ、点在する小さな空き領域を一つの連続した大きな空きブロックにまとめる処理である。これにより、大きなメモリ領域を要求する新しいプロセスも効率的に配置できるようになる。ただし、メモリ上のデータを移動させる処理はCPU時間を消費し、移動中はシステムの応答が一時的に停止する可能性があるため、実行のタイミングを慎重に考慮する必要がある。この考え方は、一部のプログラミング言語が備えるガベージコレクションのアルゴリズムにも応用されており、不要になったオブジェクトを解放した後に生存オブジェクトを整理してメモリの断片化を解消する。 次に、ストレージにおけるコンパクションである。古くから知られる例として、ハードディスクドライブ(HDD)のデフラグメンテーションが挙げられる。これも広義のコンパクションの一種であり、ファイルが複数の断片に分かれてディスク上に記録されるファイル断片化を解消する。関連する断片を物理的に連続した領域に再配置することで、読み取りヘッドの移動を最小限に抑え、ファイルへのアクセス速度を向上させる。より現代的な例としては、NoSQLデータベースなどで広く採用されているログ構造化マージツリー(LSM-Tree)というデータ構造におけるコンパクションが重要である。LSM-Treeでは、データの書き込み性能を高めるため、更新や削除も含めてすべての操作を追記処理として扱う。データはまずメモリ上のテーブルに書き込まれ、一定量に達するとソート済みのファイルとしてストレージに書き出される。この仕組みにより、同じキーに対するデータが複数のファイルに異なるバージョンとして存在したり、削除されたことを示す情報(削除マーカー)が残存したりする。このままではストレージ容量を無駄に消費し、データの読み込み時には複数のファイルを探索する必要があるため性能が劣化する。そこで、データベースシステムはバックグラウンドで定期的にコンパクション処理を実行する。このコンパクションでは、複数のデータファイルを読み込み、それらをマージ(統合)する。その過程で、古いバージョンのデータや削除マーカーが付いたデータを破棄し、最新のデータだけを新しいファイルに書き出す。これにより、不要なデータが一掃されてストレージの使用効率が向上し、読み込み性能も改善される。しかし、この処理はディスクI/OとCPUに高い負荷をかけるため、システムのパフォーマンスに一時的な影響を与える可能性がある。そのため、いつ、どのファイルを対象にコンパクションを実行するかという戦略が、データベースの性能を左右する重要な要素となる。 このように、コンパクションは異なる技術領域において共通の目的、すなわち断片化の解消による効率化と性能向上を目指すための根源的な処理である。その効果は大きい反面、実行には一定のシステムリソースを要するというトレードオフが存在する。システムエンジニアは、自身が扱うシステムにおいてコンパクションがどのような役割を果たし、どのような特性を持つのかを理解し、その動作がシステム全体の性能に与える影響を考慮しながら設計や運用を行うことが求められる。

コンパクション (コンパクション) とは | 意味や読み方など丁寧でわかりやすい用語解説