【发布时间】:2011-06-23 06:45:24
【问题描述】:
我正在寻找一种解决方案来透明地在没有循环引用的情况下持久保存 Perl 数据结构(甚至不是对象,但对象支持会是一个加分项)。我不太关心后端,但我更喜欢 JSON。对象的数量会相对较少(几千个 hashref,每个都有大约 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 - Chapter 14. Data Serialization - 谈论 DBM::Deep,一个很好的候选人。我希望序列化和透明持久性之间有更清晰的区别。
- Persistent - 自 2000 年以来没有更新
- SPOPS - 2004 年弃用
- SLOOPS 在 CPAN 上只有一个版本,从 2005 年开始
- Tangram - 看起来也被遗弃了
- Tie::File::AsHash做透明持久化,但只支持single-level hashes
- MooseX::Storage、Storable 和 JSON 看起来不错,但它们只是序列化,不是持久化框架
- DBIx::Class、Class::DBI、Fey::ORM、ORM、Rose::DB 是 OO-RDBM 映射器,I'd rather not use a database backend
- DB_File 需要 BerkeleyDB
- KiokuDB 似乎对于这项任务来说太复杂了
我只找到了一个很有前途的模块,DBM::Deep。代码和例子一样,你可以加载数据结构
my $ds = DBM::Deep->new( "myfile.db" );
不过,格式是二进制的。不是什么大问题,因为我可以使用 JSON 以人类可读的格式导出它。
那么,我是否缺少一个模块,我是否正确地解决了这个问题?
【问题讨论】:
标签: perl json frameworks persistence