Почему file_get_contents быстрее, чем memcache_get?

Я загружаю файлы XML с диска с помощью file_get_contents, и, как тест, я нахожу, что могу загрузить файл 156K с помощью file_get_contents() 1000 раз за 3,99 секунды. Я подклассифицировал часть, которая загружает и заменяет ее слоем memcache, а на моем компьютере-разработчике я могу сделать 1000 загрузок одного и того же документа за 4.54 секунды.

Я понимаю, что file_get_contents () будет выполнять некоторое кэширование, но похоже, что это на самом деле быстрее, чем известный метод кэширования. На одном сервере есть производительность file_get_contents() как можно лучше?

Я на PHP 5.2.17 через Macports, OS X 10.6.8.

Изменить: я нашел в документах XML такого размера, есть небольшое преимущество в использовании флага MEMCACHE_COMPRESSED . 1500 загрузок через memcache выполняются через 6.44 с (с сжатием), а не 6.74 (без). Однако они медленнее, чем file_get_contents , что делает такое же количество нагрузок в 5.71 сек.

Потому что file_get_contents mmap s файл, и поэтому у вас будет только несколько системных вызовов, и это закончится в кеше файловой системы. memcache включает вызовы вне процесса для memcached (и вне сервера в кластерной реализации).

Производительность file_get_contents() решающей степени зависит от типа файловой системы, например, файл в файловой системе NFS не помечен, и этот доступ может быть медленнее. Также на многопользовательском сервере кэш файловой системы может быстро сбрасываться другими процессами, тогда как кеш memcached почти наверняка будет в памяти.

file_get_contents – это самый простой способ получить файл. Основная операционная система (особенно Linux) уже имеет эффективные механизмы кэширования. Все, что вы делаете, просто создает накладные расходы и замедляет работу.

Memcache имеет смысл, если вы загрузите эти файлы из удаленного места.

Изменить: Не обязательно верно, что file_get_contents – самый простой способ. fopen / fget может быть еще быстрее – я не знаю. Но различия должны быть незначительными по сравнению со сложностью слоя кеширования.

Хранение XML-файлов в memcache имеет для меня очень мало смысла.

Я бы предпочел хранить анализируемые значения, сохраняя и чтение, и синтаксический анализ.