Я ищу решение для прозрачно персистентных структур данных Perl (даже объектов, но поддержка объектов была бы плюсом) без циклических ссылок. Меня не волнует бэкэнд, но я бы предпочел JSON. Количество объектов будет относительно небольшим (несколько тысяч хеш-ссылок с примерно 5 ключами в каждом). Под «прозрачным» постоянством я подразумеваю, что мне не нужно фиксировать изменения в бэкэнде хранилища каждый раз, когда я обновляю структуру данных в памяти.
Вот как в идеале должен выглядеть код:
my $ds;
...
# load the $ds data structure from 'myfile'
print $ds->{foo}->{bar}; # baz
$ds->{foo}->{bar} = 'quux';
... program dies, but the updated %hash has been persisted automatically in 'myfile'
# in another invocation
print $ds->{foo}->{bar}; # quux
Пока я смотрел на:
- Дэйв Рольски Объектно-ориентированная персистенция Perl Компиляция модулей - без обновлений с 2003 года
- Брайан Д. Фой MasteringPerl - Глава 14. Сериализация данных - рассказывает о DBM :: Deep, хороший кандидат. Хотелось бы, чтобы между сериализацией и прозрачным постоянством была более четкая разница.
- Постоянный - нет обновлений с 2000
- SPOPS - заброшено с 2004 года
- SLOOPS имеет только одну версию на CPAN с 2005
- Tangram - тоже выглядит заброшенным
- Tie :: File :: AsHash делает прозрачное сохранение, но поддерживает только одноуровневые хэши
- MooseX :: Storage , Storable и JSON выглядят хорошо, но это только сериализация, а не постоянные фреймворки
- DBIx :: Class , Class :: DBI , Fey :: ORM , ORM , Rose :: DB являются преобразователями OO-RDBM, а я бы предпочел не использовать серверную часть базы данных
- DB_File требуется BerkeleyDB
- KiokuDB кажется слишком сложным для задачи
Я нашел только один многообещающий модуль, DBM :: Deep . Код такой же, как в примере, и вы можете загрузить структуру данных с помощью
my $ds = DBM::Deep->new( "myfile.db" );
Хотя формат двоичный. Не большая проблема, так как я могу использовать JSON для экспорта в удобочитаемый формат.
Итак, мне не хватает модуля, и я правильно подхожу к проблеме?