あなたはこれを考えすぎているのではないかと思います。時間間隔ごとに 1 行で、各行にタイムスタンプと CPU 使用率が含まれるフラットな (たとえば) タブ区切りファイルを使用しないのはなぜですか? そうすれば、収集された新しいエントリをファイルに追加するだけです。
6 か月より前のデータを自動的に破棄する場合は、日ごと (または週ごと、月ごとなど) に別のファイルを使用し、古いファイルを削除することでこれを行うことができます。これは、毎回ファイル全体を読み書きするよりも効率的です。
このようなファイルの書き込みと解析は、Perl では簡単です。これが私の頭の上からのいくつかのサンプルコードです:
書き込み:
use strict;
use warnings;
use POSIX qw'strftime';
my $dir = '/path/to/log/directory';
my $now = time;
my $date = strftime '%Y-%m-%d', gmtime $now; # ISO 8601 datetime format
my $time = strftime '%H:%M:%S', gmtime $now;
my $data = get_cpu_usage_somehow();
my $filename = "$dir/cpu_usage_$date.log";
open FH, '>>', $filename
or die "Failed to open $filename for append: $!\n";
print FH "${date}T${time}\t$data\n";
close FH or die "Error writing to $filename: $!\n";
読む:
use strict;
use warnings;
use POSIX qw'strftime';
my $dir = '/path/to/log/directory';
foreach my $filename (sort glob "$dir/cpu_usage_*.log") {
open FH, '<', $filename
or die "Failed to open $filename for reading: $!\n";
while (my $line = <FH>) {
chomp $line;
my ($timestamp, $data) = split /\t/, $line, 2;
# do something with timestamp and data (or save for later processing)
}
}
(注: 現在、これらのサンプル プログラムのいずれもテストできないため、バグやタイプミスが含まれている可能性があります。ご自身の責任で使用してください!)