Создать систему кэширования PHP в базе данных MySQL? - PullRequest
0 голосов
/ 28 мая 2010

Я создаю веб-сервис, который часто удаляет данные с удаленных веб-страниц. После очистки этих данных у меня есть простой многомерный массив информации для использования. Процесс очистки довольно сложен для моего сервера, и загрузка страницы занимает некоторое время. Я рассматривал возможность добавления простой системы кеширования с использованием базы данных MySQL, где я создаю по одной строке для каждой удаленной веб-страницы с массивом информации, извлеченной из нее, в виде строки в кодировке JSON. Это достаточно хорошая система? Или что-то вроде текстового файла для каждой веб-страницы будет лучшей идеей?

Ответы [ 3 ]

1 голос
/ 28 мая 2010

Поскольку вы очищаете несколько веб-страниц и хотите, чтобы ваши данные постоянно кэшировались, у вас есть несколько вариантов, лучшим из которых будет использование memcache или базы данных, такой как MySQL. Использование текстовых файлов не очень хорошая идея, потому что вам придется сериализовать / десериализовать ваши данные и читать из вашей файловой системы. Запросить базу данных или memcache во много раз эффективнее.

Поскольку вы, вероятно, хотите, чтобы ваш кэш был несколько устойчивым, я бы предложил использовать MySQL. Вы просто создадите таблицу с автоинкрементным первичным ключом, который будет столбцом для каждого элемента в вашем разобранном объекте JSON. (Обратите внимание, что MySQL в настоящее время не поддерживает массивы. Чтобы эмулировать их, вам нужно будет использовать реляционные таблицы или сериализовать данные массива и передать их в текстовое поле. Первый способ предпочтительнее).

Каждый раз, когда вы чистите страницу, вы запускаете оператор UPDATE, чтобы обновить информацию этой отдельной страницы в базе данных. Если вы укажете уникальный индекс для того, что вы используете для уникальной идентификации вашей страницы (URL и т. Д.), Вы достигнете оптимальной производительности поиска.

1 голос
/ 28 мая 2010

Если вы хотите хранить кэш локально на 1 сервере (например, если ваш сервер mysql и http-сервер находятся в одном боксе), вам лучше использовать APC , то есть кеш сервис, который поставляется с PHP.

Если вы хотите хранить данные удаленно (например, в выделенном ящике кеша), я бы выбрал Memcache вместо MySQL.

"Когда у тебя есть только молоток ..."

0 голосов
/ 28 мая 2010

Я не склонен иметь особенно большие конфиги APC, макс. 64 - 128 МБ.Memcache может занимать пару гигабайт или больше (гораздо больше, если вы запускаете несколько экземпляров).И то и другое временно: перезапуск Apache или Memcache (последний менее вероятен или часто) потеряет данные

Это зависит от того, как часто вы готовы обрабатывать данные для производства.кеш, и как долго этот кеш может быть полезен для.Если это было хорошо в течение нескольких недель до того, как вы перецарапали страницы - Mysql - вполне подходящий бэк-магазин.

Возможные другие варианты, в зависимости от того, сколько элементов кэшируется и насколько велики данные, как вы предлагаете, - это файловый кеш, SQlite или другие системы.

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