Хранение хеша в памяти - PullRequest
       19

Хранение хеша в памяти

2 голосов
/ 23 июля 2010

У меня есть 1 ГБ файл таблиц с данными, разделенными столбцами. Я разобрал его и сохранил в хеше. Позже я использую этот хеш для моей дальнейшей работы. Но во время разработки моего кода каждый раз, когда я компилирую для тестирования, выполняется «анализ и сохранение в хэш», что замедляет мою программу.

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

Ответы [ 2 ]

2 голосов
/ 23 июля 2010

Не совсем. Эта информация должна быть как-то загружена в память. Тем не менее, сериализация хэш-объекта на диск может помочь, поскольку десериализация, вероятно, быстрее, чем ваш код.

Вы можете проверить freeze или проверить википедию по сериализации для дальнейших подсказок.

Ознакомьтесь с документацией на perl для FreezeThaw:

use FreezeThaw qw(freeze thaw cmpStr safeFreeze cmpStrHard);
$string = freeze $data1, $data2, $data3;
...
($olddata1, $olddata2, $olddata3) = thaw $string;
if (cmpStr($olddata2,$data2) == 0) {print "OK!"}

Все, что вам нужно сделать сейчас, это сохранить $string в файле после его анализа, прочитать его и thaw это!

0 голосов
/ 23 июля 2010

Данные в Perl хранятся не очень эффективно. В худшем случае это может занять в десятки (20-80) раз больше памяти. Обратите внимание, что это может произойти только в худшем случае. Если это произойдет с вашим набором данных 1 ГБ, вы должны заметить. Поэтому я думаю, что это не ваш случай. Структуры данных Perl очень быстрые, они часто обменивают память на скорость. Если объем памяти в вашем случае является разумным, вы можете справиться с ним и использовать прямой подход рекомендуется от Дарен Томас или более вероятно Storable рекомендуется daxim .

Если вы измерите, что потребление памяти в вашем случае слишком велико, вы можете использовать встроенное хранилище ключей / значений. Если вы не будете изменять данные после загрузки, вы можете использовать CDB_File , который немного быстрее, чем BerkeleyDB , но последний позволяет вам изменять данные на лету. Вы можете выбрать позже также, потому что это более распространенное и гибкое решение.

...