Хорошо, поэтому я работаю над этим проектом, который требует, чтобы я делал поиск в хранилище ключей памяти в таблице. Бизнес-правила, с которыми я работаю, также диктуют, что эта таблица должна быть прочитана из памяти на каждом отдельном узле, и таблица должна сохраняться в нескольких запросах.
Таким образом, очевидным решением является использование APC с apc_fetch (); и apc_store ();
Проблема состоит в том, что таблица будет состоять из тысяч и тысяч пар ключевых значений и будет иметь размер в несколько мегабайт (машины, на которых это будет работать, – это бегемот памяти)
Поэтому у меня есть некоторые проблемы с точки зрения производительности, если APC делает сериализацию кэша пользователя при загрузке.
Если это не так, то это не должно быть так много, и тогда это было бы наиболее оптимальным решением.
Однако, если это не было бы лучшей альтернативой написанию пользовательского расширения в C, который выполнял двоичный поиск в отсортированном файле структур, сохраняемых на диске?
Или (надеюсь) напишет, что пользовательское расширение просто не стоит этого.
Победы, потери, быстрые мысли?
заранее спасибо
Хотя APC будет сериализоваться при загрузке, фактический поиск через apc_fetch()
выполняется через хеш-таблицу и не должен иметь узких мест, которые вы описываете. Поскольку ваши машины – это behemoths памяти, вы должны рассмотреть возможность настройки таблиц APC на достаточно большие, чтобы держать все ваши пары ключ / значение в памяти. Это можно сделать, установив apc.user_entries_hint
в php.ini в соответствующее значение для вашего приложения.
Попробуйте взглянуть на https://serverfault.com/questions/57915/ram-disk-and-physical-raid В основном загляните в tmpfs
на linux и используйте его в качестве файловой системы regulat с любыми правилами, которые вы хотите. Его также легко отлаживать и проверять вне приложения.