我正在尋找一個解決方案透明地堅持Perl數據結構(甚至不包括對象,但對象支持是一個加號)沒有循環引用。我不太在乎後端,但我更喜歡JSON。對象的數量會相對較低(幾千個hashref,每個約5個密鑰)。通過「透明」持久性,我的意思是我不希望每次更新內存數據結構時都必須對存儲後端提交更改。簡單,現代,強大,透明的Perl數據結構持久性
這裏的代碼如何將理想的樣子:
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
到目前爲止,我已經看了:
- 戴夫Rolsky的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,Storable和JSON看起來不錯,但它們只是序列化,而不是持續ENCE框架
- 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以可讀格式導出它。
所以,我錯過了一個模塊,我是否正確地接近這個問題?
我正在尋找透明持久性(我希望這是正確的術語?)通過「透明」持久性,我的意思是我不希望每次更新內存時都必須提交對存儲後端的更改數據結構。我編輯了這個問題;感謝您指出了這一點。 – 2011-02-08 09:11:59