поиск легкого решения для персистентности данных в жемчуге

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

10
задан Haiyuan Zhang 21 June 2010 в 02:32
поделиться

5 ответов

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

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

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

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

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

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

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

15
ответ дан 3 December 2019 в 15:34
поделиться

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

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

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

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

3
ответ дан 3 December 2019 в 15:34
поделиться

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

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

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

7
ответ дан 3 December 2019 в 15:34
поделиться

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

1
ответ дан 3 December 2019 в 15:34
поделиться

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

0
ответ дан 3 December 2019 в 15:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: