在DB上存储对象并检索它

时间:2012-03-06 09:40:17

标签: perl serialization

我有一个perl对象(引用数组引用),如下所示:

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

并需要将其存储在数据库中然后检索它。

有人建议一个好的机制来序列化甚至压缩它然后将它存储在数据库上吗?然后反序列化它并在代码中使用它?

3 个答案:

答案 0 :(得分:7)

您可以使用任何已知的序列化程序,例如JSON::XSStorable。 如果要将引用检索为引用而不是值的副本,则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;

答案 1 :(得分:-1)

我自己从未尝试过,但是perldoc说Data :: Dumper的返回值可以“被唤醒以获取原始参考结构的相同副本”。然后,您可以将Dumper输出放入数据库中足够大的文本字段中。

答案 2 :(得分:-1)

Data :: Dumper怎么样? 您可以将对象转储到DB的TEXT字段中,然后评估内容以将其取回。