Я ищу решение для прозрачного сохранения структур данных 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
До сих пор я смотрел:
- Dave Rolsky Perl Object-Oriented Persistence компиляция модулей - без обновлений с 2003 года
- brian d foy MasteringPerl - Глава 14. Сериализация данных - рассказывает о DBM:: Deep, хороший кандидат. Мне жаль, что между сериализацией и прозрачной настойчивостью не было четкой разницы.
- Persistent - без обновлений с 2000 года
- SPOPS - заброшен с 2004 года
- SLOOPS имеет только одну версию в CPAN, начиная с 2005 г.
- Tangram - тоже выглядит заброшенным
- Tie:: File:: AsHash выполняет прозрачную настойчивость, но поддерживает только одноуровневые хэши
- MooseX:: Storage, Storable и JSON выглядят неплохо, но это всего лишь сериализация, а не постоянные рамки
- DBIx:: Class, Класс:: DBI, Fey:: ORM, ORM, Rose:: DB - это OO-RDBM-mappers, и Я бы предпочел не использовать бэкэнда базы данных
- DB_File требует BerkeleyDB
- KiokuDB кажется слишком сложным для задачи
Я нашел только один перспективный модуль, DBM:: Deep. Код такой же, как в примере, и вы можете загрузить структуру данных с помощью
my $ds = DBM::Deep->new( "myfile.db" );
Формат двоичный. Не большая проблема, так как я могу использовать JSON для экспорта в удобочитаемый формат.
Итак, я пропустил модуль, и я вообще правильно подхожу к проблеме?