Я использую KiokuDB
для хранения пары объектов Moose и пары простых структур массива (хэши и массивы).
Мне не нужны какие-либо необычные поиски, транзакции и т. Д.., простая возможность получить (lookup
) объект.Кроме того, как только я закончу создание БД, она может быть установлена только для чтения.В него не будет внесено никаких изменений.
Основная (единственная?) Причина, по которой я использую KiokuDB, заключается в том, чтобы сохранить граф объектов.
Самый большой объект, который доминирует над общим размером БД,является объектом Moose, в котором содержится относительно большой массив (назовем этот объект large_obj
).Ранее я сохранял large_obj
(один), используя Storable + PerlIO::gzip
или даже JSON + PerlIO::gzip
.Он работал нормально, и я был очень доволен результатами (использование gzip сжало файл хранилища примерно до 5% от его первоначального размера).
Есть еще один, меньший объект Moose, который в основном представляет собой массивоколо 20-30 тысяч маленьких объектов Moose.
Теперь, после миграции на KiokuDB, я сначала использовал простой бэкэнд Hash, затем выгрузил его в файл (используя Cmd) с помощью PerlIO::gzip
снова.Это работало очень хорошо в тех случаях, когда large_obj
было относительно небольшим, но как только оно стало больше, я просто вышел из ошибок памяти.Я полагаю, что зашитый хэш не подходит для больших объектов.
Затем я попробовал рекомендованный беркли Беркли, хотя это кажется излишним (как уже упоминалось, мне не нужны все причудливые возможности БД).Он работает намного медленнее, чем оригинальное решение Storable + PerlIO::gzip
, занимает гораздо больше места, а также не хватает памяти для более крупных объектов!(Я использую 3GB RAM Ubuntu).
Я также пробовал Files Backend , но он не работает с:
Too many open files at /usr/local/perls/perl-5.12.2/lib/site_perl/5.12.2/Directory/Transactional.pm line 130.
(in cleanup) Too many open files at /usr/local/perls/perl-5.12.2/lib/site_perl/5.12.2/Directory/Transactional.pm line 130.
У вас есть какие-либо предложения о том, как можноЯ храню свои объекты таким образом, чтобы он занимал мало места и поддерживал граф объектов?