Ищем модуль Perl для хранения хэш-структуры в общей оперативной памяти - PullRequest
5 голосов
/ 19 июня 2010

Я бы хотел постоянно хранить структуру данных в оперативной памяти и сделать ее доступной из предварительно разветвленных процессы веб-сервера на Perl.

В идеале я бы хотел, чтобы он вел себя как memcached, но без необходимости в отдельном демоне. Есть идеи?

Ответы [ 3 ]

10 голосов
/ 19 июня 2010

Используйте Cache :: FastMmap , и все, что вам нужно, это файл.Он использует mmap , чтобы обеспечить общий кэш в памяти для IPC, что означает, что это довольно быстро.См. Документацию для возможных проблем и предостережений.

6 голосов
/ 19 июня 2010

IPC :: SharedMem может соответствовать требованиям.

0 голосов
/ 20 июня 2010

Mod_perl совместно использует ОЗУ в системах с правильно реализованным разветвлением копирования при записи.Загрузите ваш Perl-хэш в блок BEGIN вашей программы mod_perl, и все разветвленные экземпляры программы mod_perl будут совместно использовать память, если нет записей на страницах, хранящих ваш хэш.Это не работает идеально (некоторые страницы будут записаны), но на моих серверах и данных это уменьшает использование памяти на 70-80%.

Mod_perl также ускоряет работу вашего сервера, исключая время компиляции для Perlна последующие веб-запросы.Недостаток mod_perl в том, что вы должны тщательно программировать и избегать программ, которые изменяют глобальные переменные, поскольку эти переменные, такие как ваш хэш, являются общими для всех экземпляров mod_perl.В любом случае стоит изучить достаточно Perl, чтобы вам не нужно было менять глобальные переменные!

Прирост производительности от mod_perl фантастический, но mod_perl недоступен на многих общих хостах.Это легко испортить и трудно отладить, пока вы изучаете его.Я использую его только тогда, когда мои клиенты достаточно высоко оценивают улучшения производительности, чтобы оправдать мою боль при разработке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...