2013-06-25 3 views
1

Предположим, у нас есть массив PHP с ~ 200 ключами, содержащими данные сайта, глобально разделяемые для всех пользователей.Разница между использованием apc_cache и хранением в файле?

Этот массив построен из базы данных SQL, которая занимает слишком много времени. Мы хотим сохранить этот массив.

Какая разница (в основном в скорости) между хранением массива с apc_store() или сериализации и сохранения в .php файл на диске, а затем извлечения либо apc_fetch() или file_get_contents() и десериализируются?

Который был бы быстрее? Почему бы не использовать файл? Зачем использовать кеш?

EDIT Одна из причин использования файла вместо кеша (для меня) заключается в том, что я могу получить доступ к файлу из CLI/shell/root с помощью CRON.

ответ

3

От лучшего к худшему:

  • APC находится в памяти и очень быстро; он автоматически сериализуется и несистеманизируется для вас.
  • memcached также находится в памяти и немного медленнее, чем APC. Это более чем компенсируется тем фактом, что он позволяет использовать один и тот же кеш на серверах.
  • unserialize(file_get_contents()) включает в себя попадание диска, но быстрее, чем разбор php. Это вариант OK, если у вас нет APC, memcached или эквивалентного кэширования в памяти.
  • var_export() для создания php-файла, который затем include работает медленнее, чем инициализация строки, потому что файл нужно разобрать - в дополнение к удару по диску. Плюсом является то, что он позволяет легко редактировать массив, если вам когда-либо понадобится.
  • serialize() в переменную, содержащуюся в файле php, предлагает худшее из них: попадание диска, разбор php и нессериализация данных.

(Там также может быть что-то сказать о том, соответствующие индексы в базе данных. Fetching 200 строк, чтобы создать массив не должен быть медленным.)