[Moscow.pm] Хранение сложных структур

Вячеслав Матюхин me на berekuk.ru
Чт Июн 24 07:29:01 PDT 2010


On Jun 24, 2010, at 16:18, Denis Davydov wrote:

> Здравствуйте!
> 
> Как лучше поступить? Надо хранить массив подобных структур в файле (и доставать, если надо):
> 
> $VAR1 = bless( {
>                 'bandwidth' => bless( {
>                                       'out' => 34,
>                                       'in' => 10
>                                     }, 'Customer::Network::Bandwidth' ),
>                 'customer' => bless( {
>                                      'status' => 0,
>                                      'name' => "\x{422}\x{435}\x{441}\x{442}",
>                                      'cid' => 5
>                                    }, 'Customer' ),
>                 'prefix' => '192.168.0.1/30'
>               }, 'Customer::Network' );
> 
> Как лучше поступить? Что использовать? Вариант с DBI отпадает (нужно именно в файл). Как я понял, JSON::XS не подойдет.
> 

У нас на проекте есть модуль Yandex::Persistent, я бы его давно залил на cpan, но надеялся, что это велосипед, и найду открытый аналог, который всем устроит.
(урезанную его версию можно посмотреть тут: http://search.cpan.org/dist/Ubic/lib/Ubic/Persistent.pm)

Внутренняя версия еще поддерживает опцию format => qr/ json | dump | storable /x и более тонкий контроль над локами.
Думаю, скоро все-таки решусь и выложу его под именем Data::Persistent.

Еще на cpan'е есть http://search.cpan.org/dist/Persistent-Base/ (но он обновлялся десять лет, и в нем строгая типизация, фуу).
И у Сережкина был http://search.cpan.org/dist/Storable-Ref/, но он только storable умеет.
Или вот http://search.cpan.org/dist/Tie-Persistent/, тоже симпатично выглядит, и умеет почти все, кроме локов.

PS: а вообще хранить storable и даже dump'ы - зло, потому что не факт, что оно правильно десериализуется после обновления модуля. Мало ли, приватная переменная переименуется.

-- 
Вячеслав Матюхин
http://friendfeed.com/mmcleric
http://berekuk.ru



Подробная информация о списке рассылки Moscow-pm