Simple, modern, robust, transparent persistence of data structures for Perl

前端 未结 3 2212
囚心锁ツ
囚心锁ツ 2021-02-20 01:52

I\'m looking for a solution to transparently persist Perl data structures (not even objects, but object support would be a plus) without circular references. I don\'t c

相关标签:
3条回答
  • 2021-02-20 02:17

    To achieve your "transparency" goal, you're going to have to either abstract it into a framework (as chambwez suggested) or use tied variables which will save themselves to disk whenever they're updated. DBM hashes use tie in this way, so DBM::Deep is probably your best bet; everything else I'm aware of requires you to explicitly tell it when to write data out and/or caches writes in the name of performance.

    0 讨论(0)
  • 2021-02-20 02:31

    Why not use JSON? It's rather easy (unless I misunderstood your question), all you would do is this:

    use JSON;
    # serialize to file
    open(my $fh, ">myfile");
    print $fh encode_json($ds); 
    close $fh;
    # deserialize from file
    open(my $fh, "<myfile");
    local $/ = undef;
    my $content = <$fh>;
    $ds = decode_json($content);
    close $fh;
    

    Another easy thing you can do is use Data::Dumper.

    0 讨论(0)
  • 2021-02-20 02:37

    I don't think transparent persistence is very good idea. Suppose you have hypothetical implementation that ties perl data structure to outside world. To be transparent, every write into the structure have to be detected and data outside updated. This is probably going to be quite expensive and end with a lot of disk activity unless you have sophisticated backend with fast random access. I cannot imagine updates of JSON file be efficient.

    Some options:

    • use database backend (DBM::Deep, DB_File or KiokuDB)
    • use key-value store as backend (Memcached, Redis)
    • define consistent workflow on data and serialize/deserialize in good moment
    0 讨论(0)
提交回复
热议问题