簡體   English   中英

如何對數據庫進行序列化和反序列化Perl數據?

[英]How can I serialize and deserialize Perl data to/from database?

將數據序列化到數據庫的最佳模塊或方法是什么?

目前我正在研究Storable函數的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. 我應該在存儲之前對序列化做任何其他事情,比如編碼嗎?

答案取決於您需要序列化的數據類型。

  1. Native:有打包/解包,對於普通數字數組,你可以用逗號等連接......任何簡單的本機方法都是特定於域的,不適用於通用數據。

  2. Storable是一種良好的標准方法。 還有其他人(我聽說過FreeseThaw但從未使用過)。 您還可以執行YAML或JSON格式化 - 為了進行比較,請參閱最近的StackOverflow問題 ,該問題涉及通過IO :: Socket :: INET發送數據數組(這也涉及序列化)。

  3. 進一步的編碼需要取決於您的序列化以及您對數據的處理方式。

    例如,如果序列化保留純文本字符串,並且這些字符串可以包含引號,並且您在SQL語句的中間使用序列化數據(而不是綁定變量),則需要對引號進行編碼。

你想要序列化什么? 有許多Perl模塊可以處理這類事情,但每個模塊都有缺點。 我在掌握Perl方面有一章關於此,但也有來自印度尼西亞Perl販子的序列化器比較

如果它真的只是字符串,就像你展示的一樣,那么大多數東西都能很好地處理你的數據。 如果要存儲代碼引用或Perl對象等內容,則需要更長的時間。

但是,要考慮的一件事是,您不一定要將數據限制為Perl。 如果另一種語言的程序想要獲取您的數據,YAML或JSON之類的東西會更加友好。 我討厭把事情鎖定在未來的決策中,所以我不喜歡Perl-only解決方案,除非我真的需要它們。

在他們知道您想要存儲的內容之前,請留意回答的人。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM