微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

简单,现代,强大,透明的Perl数据结构持久化

我正在寻找一种解决方案来透明地保持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 – Chapter 14. Data Serialization – 谈论DBM :: Deep,一个很好的候选人.我希望序列化和透明持久性之间有更明显的区别.
> Persistent – 自2000年以来没有更新
> SPOPS – 自2004年以来放弃
> SLOOPS从2005年起,CPAN上只有一个版本
> Tangram – 看起来也放弃了
> Tie::File::AsHash透明持久化,但只支持single-level hashes
> MooseX::Storage,StorableJSON看起来不错,但它们只是序列化,而不是持久性框架
> 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以人类可读的格式导出它.

所以,我错过了一个模块,我正在正确地解决问题吗?

解决方法

为了实现“透明度”目标,您将不得不将其抽象为一个框架(如chambwez建议),或者使用绑定的变量,这些变量将在自动更新时自动保存到磁盘中. DBM哈希用这种方式使用,所以DBM :: Deep可能是你最好的选择;我所知道的一切都需要你明确地告诉它什么时候以性能的名义写出数据和/或缓存写入.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐