Я предлагаю базу данных ключей / значений на диске.Благодаря функции Perl они могут использоваться идентично обычным хэшам в памяти.Они будут быстрее, чем хеши Perl для чтения / записи, если ваш хеш очень большой, и они поддерживают сохранение / загрузку на диск автоматически.
BerkeleyDB - старый фаворит:
use BerkeleyDB;
# Make %db an on-disk database stored in database.dbm. Create file if needed
tie my %db, 'BerkeleyDB::Hash', -Filename => "database.dbm", -Flags => DB_CREATE
or die "Couldn't tie database: $BerkeleyDB::Error";
$db{foo} = 1; # get value
print $db{foo}, "\n"; # set value
for my $key (keys %db) {
print "$key -> $db{$key}\n"; # iterate values
}
%db = (); # wipe
Изменения в базе данных автоматически сохраняются на диск и сохраняются при многократном вызове вашего скрипта.
Проверьте параметры в perldoc, но наиболее важными являются:
# Increase memory allocation for database (increases performance), e.g. 640 MB
tie my %db, 'BerkeleyDB::Hash', -Filename => $filename, -CacheSize => 640*1024*1024;
# Open database in readonly mode
tie my %db, 'BerkeleyDB::Hash', -Filename => $filename, -Flags => DB_RDONLY;
Более сложной, но гораздо более быстрой библиотекой базы данных будет Tokyo Cabinet , и, конечно, есть много других опций (в конце концов, это Perl ...)