On Mon, Aug 9, 2010 at 12:41 PM, Marco Neves
<perl-module-auth...@knowhunter.cjb.net> wrote:
> On Monday 09 August 2010 20:59:50 David Nicol wrote:
>> On Sun, Aug 8, 2010 at 4:58 AM, Marco Neves [ModAuthors]
>>
>> <perl-module-auth...@knowhunter.cjb.net> wrote:
>> > Hello,
>> >
>> >        In need for a way to transfer a large amount of small
>> > datastructures I created a module that stores and retrieves a stream of
>> > storables in a file.
>>
>> I'm confused -- a stream can't be stored in a file, because it is
>> continually generated.
>>
>> Also, what is different about this freezer/thawer that makes it
>> superior to, for instance, YAML or compressed Data::Dumper dumps?
>>
>> That is, for what general class of use cases would one prefer the
>> Neves data marshalling system to the available others?
>>
>> Also, if you're reusing other things in it -- you say "storables" are
>> you doing something like prefixing length and colon to the output of
>> Storable and jamming a bunch of those together? -- the underlying
>> technology and then "stream" might make sense, especially if it can
>> take an open handle instead of a file name in its constructor. Such a
>> thing could be nice for creating an abstracted pipe between
>> distributed processes for instance.
>
> Hi,
>
>        Yes, the module does store a lot of storables on a single file, and 
> yes,
> it accepts an open handler as constructor.
>
>        I written it to transfer large amounts of "small" data structures 
> between
> servers.
>
>        I'm thinking to use the name Archive::StorableStream for the module. 
> The
> git repository is in:
>
>        http://git.magick-source.net/perl5/storablestream
>
>        Before you tell it, I know, none of the docs are still done.


FWIW, have you considered how to deal with what happens if your chunks
don't match the size prefix? If I read your protocol correctly, you
are sending the length of the following blob as ASCII digits
terminated by a \0.

    $blob = Storable::nfreeze( ... )
    $packed = length( $blob ) . "\0$blob"

and to read:

    $length = 0 + $packed;
    Storable::thaw( substr $packed, length $length )

I dunno your objection to YAML but it has the nice property that it
provides context for helping to recover from mis-transmitted documents
in the stream by virtue of having a nested-ness marker (the
indentation) and both starting and ending document tokens (--- and
...). Further, I would highly discourage you from naming anything
using "Storable" with "Archive" because absolutely no one should ever
consider actually *storing* a Storable blob. If you keep one around
then you'll be tempted to read it in a client version that didn't
match what you created it with. That way lies madness.

Josh

Reply via email to