Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発
  1. Perl
  2. ファイル入出力
  3. here

シーケンシャルアクセスとランダムアクセス

ファイルにアクセスする方法には、シーケンシャルアクセスとランダムアクセスという2種類の方法があります。

シーケンシャルアクセスとは、ファイルを先頭から順番に読み込んでいくアクセスのことで、ランダムアクセスとは、ファイルの特定のバイト位置を指定するアクセスのことです。

シーケンシャルアクセスは、可変長のテキストファイルを扱う場合に利用され、ランダムアクセスは固定長バイナリファイル高速に処理する場合に利用されます。

シーケンシャルアクセスとは

シーケンシャルアクセスは順次アクセスとも呼ばれます。シーケンシャルアクセスとは、ファイルを先頭から順番に読み込んでいくアクセス方法のことです。ファイルをopen関数でオープンして、readline関数で1行づつ読み込んでいくのは、シーケンシャルアクセスになります。テキストファイルは、この方法でアクセスします。

シーケンシャルアクセスの欠点としては、たとえば、変更したい部分がファイルの1万行目にあった場合は、必要のない9999行を読み込む必要があることです。高速にアクセスする必要があるときは、シーケンシャルアクセスは向いていません。

ただ、改行を区切り文字とするような可変長のテキストファイルを扱う場合はシーケンシャルアクセスしか利用できません。

ランダムアクセスとは

ランダムアクセスとは、ファイルのなかの特定のバイト位置を指定しておこなうファイルアクセス方法のことです。たとえば、「10バイト目から8バイト」のように指定します。ランダムアクセスという名前ですが、ランダムにアクセスするという意味はありません。バイト位置を指定したアクセスを意味します。

|---------------------------------------|
|    |         |データ|        |        |
|----+---------+------+--------+--------|

上記の「データ」が先頭から10バイト目で、8バイトのデータならば、その位置を指定することで、直接アクセスすることができます。

バイト位置を直接指定できるので、ファイルへのアクセスが非常に高速になります。シーケンシャルアクセスのように、余分な部分を読み込む必要がないからです。ただし、特定のバイト位置を指定してファイルにアクセスするためには、ファイルを固定長のデータを扱うように設計しなければなりません。ファイルが可変長であれば、特定の位置を指し示すことができないからです。

シーケンシャルアクセスとランダムアクセスの比較

  シーケンシャルアクセス ランダムアクセス
アクセス方法 順次読み込み バイト位置の指定
主な用途 テキストファイルの読み込み 速度が要求されるアプリケーション
速度 データが後ろにあるほど低速 直接アクセスできるため高速
ファイル設計 可変長データでも可 固定長データ