Database 如何在数据库中序列化和反序列化Perl数据?

Database 如何在数据库中序列化和反序列化Perl数据?,database,perl,serialization,module,Database,Perl,Serialization,Module,将数据序列化到数据库中的最佳模块或方法是什么 目前我正在研究可存储函数冻结和解冻,例如: 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 %deseria

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

目前我正在研究可存储函数冻结和解冻,例如:

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) };
我想知道的是:

Perl中是否有用于序列化和反序列化数据的本机命令? 可存储是将数据序列化和反序列化到数据库中的好方法,还是有更好的方法/模块? 在存储序列化之前,我是否应该对其执行其他操作,如编码?
答案取决于需要序列化的数据类型

本机:有pack/unpack,对于纯数字数组,可以使用逗号等连接。。。任何简单的本机方法都是特定于领域的,不适用于通用数据

可存储是一种很好的标准方法。还有一些我听说过但从未使用过的。您还可以进行YAML或JSON格式设置-为了进行比较,请参阅最近一篇关于通过IO::Socket::INET发送数据数组的文章,该文章还涉及序列化

进一步的编码需求取决于您所做的序列化,以及您对数据所做的操作

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


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

本机:有pack/unpack,对于纯数字数组,可以使用逗号等连接。。。任何简单的本机方法都是特定于领域的,不适用于通用数据

可存储是一种很好的标准方法。还有一些我听说过但从未使用过的。您还可以进行YAML或JSON格式设置-为了进行比较,请参阅最近一篇关于通过IO::Socket::INET发送数据数组的文章,该文章还涉及序列化

进一步的编码需求取决于您所做的序列化,以及您对数据所做的操作

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


你想序列化什么?有许多Perl模块可以处理这类事情,但它们都有缺点。关于这一点,我有一章是关于掌握Perl的,但也有来自印度尼西亚Perl贩子的经验

如果它真的只是字符串,如您所示,那么大多数事情都可以很好地处理您的数据。如果您想存储代码引用或Perl对象之类的东西,您的时间就比较困难

但是要考虑的一件事是,你不一定想把你的数据限制到perl。如果用另一种语言编写的程序想要获取您的数据,那么YAML或JSON之类的东西会更友好。我讨厌做那些把我锁在未来决策中的事情,所以我不喜欢只使用Perl的解决方案,除非我真的需要它们


当心那些在知道你想储存什么之前回答问题的人

你想序列化什么?有许多Perl模块可以处理这类事情,但它们都有缺点。关于这一点,我有一章是关于掌握Perl的,但也有来自印度尼西亚Perl贩子的经验

如果它真的只是字符串,如您所示,那么大多数事情都可以很好地处理您的数据。如果您想存储代码引用或Perl对象之类的东西,您的时间就比较困难

但是要考虑的一件事是,你不一定想把你的数据限制到perl。如果用另一种语言编写的程序想要获取您的数据,那么YAML或JSON之类的东西会更友好。我讨厌做那些把我锁在未来决策中的事情,所以我不喜欢只使用Perl的解决方案,除非我真的需要它们


当心那些在知道你想储存什么之前回答问题的人

谢谢,这很有帮助。。。是否需要对我序列化的内容进行消毒?我的意思是,如何打破序列化很容易吗?@Prix-取决于序列化以及您想要清理的内容和方式。大多数正常的编码模式是100%无损的,因此非序列化的结果将是原始数据,例如,看看URI编码,或转义CSV数据中的引号。关于您提到的主题,您能否确认该链接是此链接,如果是,请在您的回复中更新该链接,以供其他可能遇到该链接的人进一步参考?thanks@Prix-就是这个。更新另一个选项是使用KiokuDB的序列化部分,如果您不想,您实际上不必将KiokuDB用于存储。这很好,因为您有一个到各种不同序列化格式的接口,循环引用等问题将为您管理。不过,它的重量相当重。谢谢你,这帮了大忙。。。是否需要对我序列化的内容进行消毒?我的意思是,打破序列化容易吗?@Prix-取决于序列化
n以及您要消毒的内容和方式。大多数正常的编码模式是100%无损的,因此非序列化的结果将是原始数据,例如,看看URI编码,或转义CSV数据中的引号。关于您提到的主题,您能否确认该链接是此链接,如果是,请在您的回复中更新该链接,以供其他可能遇到该链接的人进一步参考?thanks@Prix-就是这个。更新另一个选项是使用KiokuDB的序列化部分,如果您不想,您实际上不必将KiokuDB用于存储。这很好,因为您有一个到各种不同序列化格式的接口,循环引用等问题将为您管理。然而,它的重量相当重。对于任何非暂时性的东西,使用NFREZE,而不是FREZE。对于任何非暂时性的东西,使用NFREZE,而不是FREZE。