如何对数据库进行序列化和反序列化Perl数据?

时间:2010-10-11 00:25:07

标签: database perl serialization module

将数据序列化到数据库的最佳模块或方法是什么?

目前,我正在研究可存储函数freezethaw,例如:

use Storable qw(freeze thaw);
use strict;

my %array_test = ('Year Average' => 0.1, 'Color Average' => 0.8, 'Humans' => 0, 'Units' => 1);
my $serialized_data = freeze(\%array_test);
my %deserialized_data = %{ thaw($serialized_data) };

我想知道的是:

  1. Perl中是否有任何本机命令可以序列化和反序列化数据?
  2. Storable是一个很好的方法来序列化和反序列化到数据库中还是有更好的approch /模块?
  3. 在存储之前我应该​​对序列化做任何其他事情,比如编码吗?

2 个答案:

答案 0 :(得分:2)

答案取决于您需要序列化的数据类型。

  1. Native:有打包/解包,对于普通数字数组,你可以用逗号等连接......任何简单的本机方法都是特定于域的,不适用于通用数据。

  2. Storable是一种很好的标准方法。还有其他人(我听说过FreeseThaw但从未使用过)。您还可以执行YAML或JSON格式化 - 为了进行比较,请查看最近的StackOverflow question有关通过IO :: Socket :: INET发送数据的信息(也涉及序列化)。

  3. 进一步的编码需要取决于您的序列化以及您对数据的处理方式。

    E.g。如果序列化保留纯文本字符串,并且这些字符串可以包含引号,并且您在SQL语句的中间使用序列化数据(而不是绑定变量),则需要对引号进行编码。

答案 1 :(得分:2)

你想要序列化什么?有许多Perl模块可以处理这类事情,但每个模块都有缺点。我在掌握Perl 中有一章关于此,但也有来自印度尼西亚Perl贩子的comparison of serializers

如果它真的只是字符串,就像你展示的一样,那么大多数东西都可以很好地处理你的数据。如果你想存储诸如代码引用或Perl对象之类的东西,你会有更艰难的时间。

但要考虑的一件事是,您不一定要将数据限制为Perl。如果另一种语言的程序想要获取您的数据,YAML或JSON之类的东西会更加友好。我讨厌做一些事情来锁定我未来的决定,所以我不喜欢Perl-only解决方案,除非我真的需要它们。

注意那些在知道你想要存储的内容之前回答的人。 :)