Хранение объекта в БД и его извлечение - PullRequest
5 голосов
/ 06 марта 2012

У меня есть объект perl (ссылка на массив ссылок), как показано ниже:

my $a = [ [$a, $ab, $c ], [$a, $b, $c] ] ;

и нужно сохранить его в БД, затем извлечь его.

Может ли кто-нибудь предложить хороший механизм для сериализации, даже чтобы сжать его и затем сохранить в БД? Затем десериализовать его и использовать в коде?

Ответы [ 3 ]

7 голосов
/ 06 марта 2012

Вы можете использовать любой из известных сериализаторов, например, JSON :: XS или Хранится . Storable лучше, если вы хотите получать ссылки как ссылки, а не как копии значений. Затем сохраните сериализованный объект в поле любого типа (VARCHAR, BLOB, ...), которое удовлетворяет требованиям хранения.

use Storable qw(nfreeze thaw);
use DBI;

# ... connect to database
# Store
my $data = [ [$a, $b, $c ], [ $a, $b, $c ] ];
my $bytestream = nfreeze $data;
$dbh->do('insert into table (field) values(?)', undef, $bytestream);

# Retrieve
$bytestream = $dbh->selectrow_array('select field from table where ...');
$data = thaw $bytestream;

Кроме того, вы можете сжать $bytestream, например, через IO::Compress::Gzip

my $bytestream = gzip nfreeze $data;
0 голосов
/ 06 марта 2012

А как насчет Data :: Dumper?Вы можете сбросить объекты в поле TEXT БД, а затем проверить содержимое, чтобы получить его обратно.

0 голосов
/ 06 марта 2012

Я никогда не пробовал это сам, но perldoc говорит, что возвращаемое значение Data :: Dumper может быть «найдено, чтобы получить идентичную копию исходной ссылочной структуры». Затем вы можете поместить вывод Dumper в достаточно большое текстовое поле в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...