Может ли BerkeleyDB в perl обрабатывать хеш хэшей хэшей (до n)?

У меня есть сценарий, использующий хеш, который содержит четыре строки в качестве ключей, значениями которых являются хэши. Эти хэши также содержат четыре строки в качестве ключей, значениями которых также являются хэши. Этот шаблон продолжается до n-1 уровней, которые определяются во время выполнения. Хэши n-го уровня содержат целые (в отличие от обычных хеш-ссылок) значения.

Я установил модуль BerkeleyDB для Perl, чтобы использовать дисковое пространство вместо оперативной памяти для хранения этого хэша.Я предположил, что могу просто связать хэш с базой данных, и он будет работать, поэтому я добавил в свой код следующее:

my %tags = () ; 
my $file = "db_tags.db" ; 
unlink $file; 


tie %tags, "BerkeleyDB::Hash", 
        -Filename => $file, 
        -Flags => DB_CREATE
     or die "Cannot open $file\n" ;

Однако я получаю сообщение об ошибке:

Невозможно использовать строку ("HASH(0x1a69ad8 )") в качестве ссылки HASH, в то время как "строгие ссылки" используются в getUniqSubTreeBDB.pl, строка 31, строка 1.

Для проверки я создал новый сценарий с кодом (выше), который привязывал хэш к файлу. Затем я добавил следующее:

my $href = \%tags; 
$tags{'C'} = {} ;

И все заработало нормально. Затем я добавил:

$tags{'C'}->{'G'} = {} ;

И это дало бы примерно ту же ошибку. Я думаю, что BerkeleyDB не может обрабатывать структуру данных, которую я создаю. Может быть, он смог обработать первый уровень (C->{}) в моем тесте, потому что это была обычная клавиша -> скалер?

В любом случае буду признателен за любые предположения или подтверждения моей гипотезы.

8
задан gravitas 21 March 2012 в 16:34
поделиться