Подтвердить что ты не робот

Ищет облегченное решение для сохранения данных в perl

В моем приложении мне нужно хранить некоторые простые данные как в memroy, так и на диске. В моем случае реальная база данных будет излишней, поэтому мне нужен более легкий, чтобы справляться с простым требованием сохранения данных. Я сам делаю поиск по Google, и нашел что-то интересное, например, DBM и DBI CVS и т.д., Но так как там слишком много вариантов, поэтому мне сложно сделать выбор actuaaly, поэтому я хотел бы попросить вас здесь "лучшая практика", например, решение о переносимости данных веса в perl.

4b9b3361

Ответ 1

У вас есть несколько вариантов:

  • Storable является основным модулем и очень эффективен. Это h как некоторые проблемы с переносимостью, например, кто-то, использующий более старую версию Storable, может не прочитать ваши данные. Кроме того, важна сущность системы, создающая и извлекающая эти данные. Расширенные опции сетевого порядка помогают снизить проблемы с переносимостью. Вы можете сохранить произвольную вложенную структуру данных в файл или строку и восстановить ее. Storable поддерживается только Perl.

  • YAML - текстовый формат, который работает как сохраняемый - вы можете хранить и восстанавливать произвольные структуры в/из YAML файлы. YAML хорош, потому что есть библиотеки YAML для нескольких языков. Это не так быстро или экономично, как Storable.

  • JSON - популярный формат обмена данными с поддержкой на многих языках. Это очень похоже на YAML в его сильных и слабых сторонах.

  • DBD:: SQLite - это драйвер базы данных для DBI, который позволяет хранить всю реляционную базу данных в одном файле. Он мощный и позволяет работать со многими инструментами персистентности, которые нацелены на другие базы данных, такие как MySQL и Postgres.

  • DBM:: Deep - это удобный и мощный модуль perl, который позволяет эффективно извлекать и модифицировать небольшие части большого постоянного структуры данных. Почти такой же простой в использовании, как Storable, но гораздо эффективнее при работе с небольшими частями большой структуры данных.

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

Ответ 2

Возможно, вы захотите попробовать Tie:: Storable. Тогда это так же просто, как обращение к хешу.

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

Если вы ищете что-то более сложное, но все же легкое, многие люди (включая меня) клянутся SQLite.

Ответ 3

Если бы мне пришлось это сделать, я бы, вероятно, пошел с DBI и DBD:: SQLite, так как это не связано с чтением всех данных в памяти, но я хотел бы упомянуть несколько других способов, потому что "там больше чем один способ сделать это":

Старый способ сделать это был с DB_file и его кузенами. Он по-прежнему работает с современными версиями Perl. Недостатком является то, что он полезен только для хранения одномерного хэша (хеш, в котором нет ссылок). Преимущество в том, что вы можете найти хорошие книги об этом, которые не стоят очень больших денег, а также онлайн-статей, а также я считаю, что это не связано с чтением всего файла в память.

Другой метод - распечатать содержимое Data::Dumper в файл для хранения и eval содержимое файла для чтения данных.

Еще одна вещь, о которой не упоминалось, - KiokuDB, которая выглядит как самый передовой модуль на основе Moose, если вы хотите быть модными.

Ответ 4

Вы хотите, чтобы ваши данные были прозрачно сохранены, т.е. вам не придется беспокоиться о выполнении операции commit() типа после каждой записи? Я просто задал очень похожий вопрос: Простая, современная, надежная, прозрачная персистентность данных для Perl и перечислены все найденные решения.

Если вам нужна прозрачная настойчивость (autocommit), то DBM::Deep может быть проще в использовании, чем Storable. Вот пример кода, который работает из коробки:

use DBM::Deep;

tie my %db, 'DBM::Deep', 'file.db';

if ( exists $db{foo}->{bar} ) {
    print $db{foo}->{bar}, "\n"
} else {
    $db{foo}->{bar} = 'baz';
}    

Ответ 5

Посмотрите Tie::File и подмодули вроде Tie::File::AsHash или Tie::Handle::CSV. Все доступные на CPAN, быстрая и простая в использовании.

Ответ 6

Storable позволяет сериализовать любую структуру данных Perl и читать ее обратно. Для хранения в памяти просто используйте IO:: Скаляр для хранения в строку, таким образом вам нужно только написать код один раз и для записи на диск, вы просто передаете другой дескриптор ввода-вывода.