Как я могу сериализовать и десериализовать данные Perl в / из базы данных? - PullRequest
1 голос
/ 11 октября 2010

Каков наилучший модуль или подход для сериализации данных в базу данных?

В настоящее время я изучаю хранимые функции freeze и thaw, пример:

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 хорошим подходом для сериализации и десериализации в базу данных, или есть лучшие подходы / модули?
  3. Должен ли я что-то еще делать с сериализацией перед ее сохранением, например, кодировать ее?

Ответы [ 2 ]

2 голосов
/ 11 октября 2010

Что вы пытаетесь сериализовать? Существует много модулей Perl, которые могут справиться с подобными вещами, но у каждого из них есть свои недостатки. У меня есть глава в Мастеринг Perl по этому поводу, но есть также сравнение сериализаторов от индонезийских монстров Perl.

Если на самом деле это просто строки, как вы показываете, то большинство вещей могут нормально обрабатывать ваши данные. Если вы хотите хранить такие вещи, как ссылки на код или объекты Perl, у вас сложнее.

Однако следует учитывать, что вы не обязательно хотите ограничивать свои данные Perl. Если программа на другом языке хочет получить ваши данные, что-то вроде YAML или JSON гораздо удобнее. Я ненавижу делать вещи, которые ограничивают меня в будущих решениях, поэтому я не предпочитаю решения только для Perl, если они мне действительно не нужны.

Остерегайтесь людей, которые ответят, прежде чем они узнают, что вы хотите сохранить. :)

2 голосов
/ 11 октября 2010

Ответы зависят от типа данных, которые необходимо сериализовать.

  1. Собственный: есть pack / unpack, для простых числовых массивов вы можете объединить запятыми и т. Д. Любой из простых нативных методов очень специфичен для предметной области и не применим к общим данным.

  2. Storable - это хороший стандартный подход. Есть и другие (я слышал о FreeseThaw, но никогда не использовал). Вы также можете выполнить форматирование YAML или JSON - для сравнения, смотрите недавний вопрос StackOverflow об отправке массива данных через IO :: Socket :: INET (который также включает сериализацию).

  3. Дальнейшая необходимость кодирования зависит от сериализации, которую вы делаете, и от того, что вы делаете с данными.

    например. если при сериализации сохраняются строки в виде простого текста, и эти строки могут содержать кавычки, и вы используете сериализованные данные в середине оператора SQL (вместо привязки переменных), вам необходимо кодировать кавычки.

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