Использование файлов DBM для обработки данных. Использованиетекстовых файлов в качестве базы данных.
Существует несколько разновидностей баз данных Berkeley, которые обобщенно называются файлами DBM (от английского Database Manager). Данные в DBM-файле хранятся в двоичном виде, а логически его можно рассматривать как ассоциативный массив, хранящийся на диске. В таких операционных системах, как Linux, FreeBSD или Solaris, Perl часто устанавливается с поддержкой этого формата данных, которая реализована в модуле DB_File. В операционной системе MS Windows этот модуль потребуется установить дополнительно. С помощью этого модуля легко пользоваться базой данных в формате Berkeley DB, потому что с файлом базы данных можно работать как с обычным хэшем. Для этого устанавливается связь между переменной-хэшем и файлом на диске с помощью функции tie(), которой указывается, что для доступа к файлу (например, 'file.db') нужно использовать модуль DB_File. Если указанный файл не существует, он создается. Когда работа с файлом базы данных через хэш-переменную закончена, связь между ними разрывается функцией untie():
use DB_File; # подключить модуль для работы с Berkeley DB
my %hash; # через этот хэш будет происходить работа с БД
tie %hash, 'DB_File', 'file.db' or die; # установить связь
$hash{'КЛЮЧ'} = 'ЗНАЧЕНИЕ'; # добавить элемент в хэш и БД
untie %hash ; # разорвать связь между хэшем и БД
Формат DBM имеет ограничение, присущее всем ассоциативным массивам: с каждым ключом файла базы данных может ассоциироваться только одно значение. Есть много способов обойти это ограничение, и один из них заключается в использовании модуля Storable, который предназначен для организации хранения во внешней памяти массивов, хэшей и других программных объектов. Функция Storable::freeze() "замораживает" данные в двоичном виде, например, перед записью на диск, а функция thaw() "размораживает" информацию, восстанавливая первоначальную структуру данных:
use DB_File; # модули для работы с DBM use Storable qw(freeze thaw); # и сохранения данных my %database; # хэш "привязывается"... tie %database, "DB_File", "mollusc.db" or die; # ...к БД open my $text, '<', 'mollusc.txt' or die; # файл, откуда while (my $data = <$text>) { # читаем данные, chomp($data); # удаляя \n # и разбивая строку на поля по разделителю ';': my ($id, $name, $latin, $area) = split(';', $data); my %record = ( # заполняем поля записи БД: ID => $id, # идентификатор экземпляра NAME => $name, # наименование моллюска LATIN => $latin, # латинское название AREA => $area); # ареал обитания my $serialized = freeze \%record; # "замораживаем" $database{$id} = $serialized; # и сохраняем запись } close $text; # закрываем тестовый файл untie %database; # и базу данных
После того как база данных DBM создана, мы можем обрабатывать в ней данные, используя функции работы с хэшами. Например, так будет выглядеть поиск по ключу:
Для перебора всех записей файла DBM можно пользоваться функциями keys() и each(), а для удаления записи - применить функцию delete().
Дата добавления: 2016-04-23; просмотров: 657;