PHP тайник бедняков - PullRequest
1 голос
/ 22 июня 2010

У меня есть несколько небольших наборов данных из базы данных (mysql), которые редко обновляются.
В основном 3 или 4 небольших двумерных массива (50-200 наименований).
Это идеальный случай для memcached, но я на общем сервере и не могу ничего установить.
У меня есть только PHP и MySQL.

Я думаю о том, чтобы хранить массивы в файле и восстанавливать файл с помощью задания cron каждые 2-3 часа.

Есть идеи или предложения об этом подходе лучше?
Как лучше всего хранить эти массивы?

Ответы [ 3 ]

2 голосов
/ 22 июня 2010

Если вы работаете с перегруженным сервером MySQL, тогда да, кэшируйте эти данные в файл. Тогда у вас есть два способа обновить кеш: безоговорочно, с помощью задания cron, каждые N минут (я бы не обновлял его реже, чем каждый час) или каждый раз, когда данные изменяются. Лучший подход зависит от вашей конкретной ситуации. В общем, способ работы cron является самым простым, но способ изменения в значительной степени гарантирует, что вы никогда не будете использовать устаревшие данные.

Что касается формата хранения, вы можете просто сериализовать () массив и сохранить строку в файл. С большими массивами unserialize () быстрее, чем объявление большого массива (...).

1 голос
/ 22 июня 2010

Мой английский не очень хорош, извините.

Иногда я читал о любой альтернативе memcache. Это сложно, но я думаю, что вы можете использовать http://www.php.net/manual/en/ref.sem.php для доступа к общей памяти.

Простой пример класса, используемый для хранения данных, находится здесь: http://apuntesytrucosdeprogramacion.blogspot.com/2007/12/php-variables-en-memoria-compartida.html

Написано на испанском языке, извините, но код легко понять (Eliminar = удалить)

Я никогда не проверял этот код !! и я не знаю, является ли это жизнеспособным на общем сервере.

1 голос
/ 22 июня 2010

Как сказано в комментариях, было бы лучше проверить, нельзя ли сначала устранить корень проблемы.Обход, который долго звучит как проблема конфигурации сети.

В противном случае, если БД просто имеет такую ​​медленную скорость, ничто не говорит против кеша на основе файловой системы.Вы можете превратить каждый запрос в хеш md5() и использовать его в качестве имени файла.Serialize() набор результатов в файл и получить его оттуда.Используйте filemtime(), чтобы определить, старше ли файл кэша, чем x часов.Если это так, сгенерируйте запрос - или на самом деле, чтобы избежать проблем с блокировкой файлов кэша, используйте задание cron для его восстановления.

Просто обратите внимание, что таким образом вы будете иметь дело с целыми наборами результатов, которыеВы должны загрузить в память вашего скрипта все сразу.У вас не было бы возможности запрашивать набор результатов строка за строкой.Это можно сделать и в кешированном виде, но это сложнее.

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