2011-12-30 2 views
3

для моего текущего проекта Мне нужно хранить небольшую базу данных на диске, которую я читаю, как только моя программа запускается и записывает ее один раз.Perl DBM vs. Storable

Я изучил функциональность DBM perls и, насколько я понимаю, он предоставляет только хэш, который хранится на диске с каждым чтением и записью, идущим прямо на диск.

Мой вопрос: могу ли я не просто использовать Storable или любой из связанных модулей для достижения того же (постоянный хеш) с гораздо меньшими накладными объемами ввода-вывода? (Хэш никогда не будут в большой, чтобы поместиться в память легко)

С уважением Ник

+1

Вы ссылаетесь на ['DBM :: Deep'] (https://metacpan.org/module/DBM::Deep)? – Zaid

+0

Я использую функцию 'dbmopen()' ... – Nick

+0

Если вы не имеете в виду DBM :: Deep, возможно, вы должны быть. –

ответ

2

SQLite быстро становится стандартом для простых баз данных на диске. И в Perl вы можете просто использовать DBD::SQLite, и вам хорошо идти.

1

Поскольку предыдущие ответы не на самом деле ответить на ваш фактический вопрос, «да, вы можете» ... со следующими оговорками:

  • Storable не очень подходит для одновременного доступа.
  • Вам нужно будет свернуть свое «атомное» обновление (то есть: вам нужно будет записать в файл tmp, а затем переименовать).
  • Если производительность на самом деле не является проблемой, вы также можете использовать Data :: Dumper (с полученным файлом, который может быть прочитан человеком).
  • Вы можете разбить содержимое на CSV.

Я часто использую самосвал, когда есть только одна задача доступа к файлу - и это дает мне способ прочитать/изменить содержимое, если я сочту нужным.