gpt4 book ai didi

perl - Perl 数据结构的简单、现代、健壮、透明的持久性

转载 作者:行者123 更新时间:2023-12-04 01:03:13 27 4
gpt4 key购买 nike

我正在寻找一种解决方案来透明地保留 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

到目前为止,我已经看过:
  • 戴夫·罗尔斯基的 Perl Object-Oriented Persistence模块编译 - 自 2003 年以来没有更新
  • 布赖恩 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 , 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 建议的那样)或使用 tie d 变量,它们在更新时将自己保存到磁盘。 DBM 哈希使用 tie这样,所以DBM::Deep可能是你最好的选择;我所知道的所有其他事情都需要您明确告诉它何时以性能的名义写出数据和/或缓存写入。

    关于perl - Perl 数据结构的简单、现代、健壮、透明的持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4930807/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com