Использование файлов 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 создана, мы можем обрабатывать в ней данные, используя функции работы с хэшами. Например, так будет выглядеть поиск по ключу:

use DB_File; # модули для работы с DBM use Storable qw(freeze thaw); # и сохранения данных my %database; # хэш "привязываем"... tie %database, "DB_File", "mollusc.db" or die; # ...к БД my $id = 65590; # ищем "Перловицу" if (exists $database{$id}) { # по идентификатору my $serialized = $database{$id}; # считываем и %record = %{ thaw($serialized) }; # "размораживаем" printf "%5d %s %s %s\n", # запись БД в хэш $id, $record{NAME}, $record{LATIN}, $record{AREA}; } untie %database; # "отвязываем" БД от хэша # будет выведено: 65590 Перловица Unio pictorum


Для перебора всех записей файла DBM можно пользоваться функциями keys() и each(), а для удаления записи - применить функцию delete().


 








Дата добавления: 2016-04-23; просмотров: 668;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.