[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