APC против пользовательского расширения Mmap - PullRequest
4 голосов
/ 01 марта 2011

Хорошо, я работаю над этим проектом, который требует от меня поиска в таблице значений ключа памяти в таблице.Бизнес-правила, с которыми я работаю, также диктуют, что эта таблица должна считываться из памяти на каждом отдельном узле, и таблица должна сохраняться при нескольких запросах.

Поэтому очевидным решением является использование APC с apc_fetch ();и apc_store ();

Проблема в том, что таблица будет состоять из тысяч и тысяч пар ключ-значение и будет иметь размер в пару мегабайт (машины, на которых она будет работать, являются гигантами памяти)

Так что у меня есть некоторые проблемы с точки зрения производительности, если APC выполняет сериализацию пользовательского кэша под нагрузкой.

Если это не так, то это не должно быть настолько большим делом, и тогда это будет на самом деле болееоптимальное решение.

Однако, если бы не было лучшей альтернативы написать собственное расширение на C, которое бы выполняло бинарный поиск по отсортированному файлу структур, сохраненных на диске?

Или (надеюсь) написал бы, что пользовательское расширение просто не стоит его вообще.

Победы, поражения, быстрые мысли?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 01 марта 2011

Попробуйте взглянуть на https://serverfault.com/questions/57915/ram-disk-and-physical-raid В основном посмотрите на tmpfs в Linux и используйте его как регулируемую файловую систему с любыми правилами, которые вы хотите.Его также легко отлаживать и проверять вне приложения.

0 голосов
/ 01 марта 2011

Хотя APC будет сериализоваться при загрузке, фактический поиск через apc_fetch() выполняется через хеш-таблицу и не должен содержать узких мест, таких как вы описали.Поскольку ваши машины являются гигантами памяти, вам следует подумать о том, чтобы настраивать таблицы APC достаточно большими, чтобы хранить все ваши пары ключ / значение в памяти.Это можно сделать, установив apc.user_entries_hint в php.ini на соответствующее значение для вашего приложения.

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