Лучший подход к ограничению трафика базы данных для больших запросов? - PullRequest
0 голосов
/ 24 ноября 2008

У меня есть база данных, с которой я работаю, которая обновляется каждые несколько часов удаленно (без какого-либо определенного промежутка времени), и я не контролирую ее администрирование. У меня есть веб-клиенты, подключающиеся к нему для просмотра информации, содержащейся в нем Эти клиенты (закодированные с использованием PHP и Javascript) могут очень часто проверять базу данных (нетерпеливые пользователи), хотя в самой базе данных не может быть никаких изменений, и проверка будет включать довольно длительный запрос, включающий множество поисков, перекрестных ссылок и т. Д .

Таким образом, чтобы сократить количество запросов к базе данных и обеспечить более быструю работу, что будет лучшим способом ограничить число случаев, когда клиенты будут фактически выполнять весь запрос к базе данных?

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

Ответы [ 3 ]

4 голосов
/ 24 ноября 2008

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

2 голосов
/ 26 ноября 2008

Я бы посмотрел на Zend_Cache .

Каждый запрос будет выполняться только один раз за время существования кэша (который можно легко изменить). Сеансы не являются жизнеспособным решением, поскольку один и тот же запрос будет выполняться хотя бы один раз для каждого пользователя. Сессии также могут быть легко возобновлены.

Вы захотите проверить, существует ли набор результатов в кэше. Если нет, кэшируйте набор результатов с уникальным идентификатором:

$query = "SELECT * FROM really_big_table";
$cache_query = md5($query);
if(!$result = $cache->load($cache_query))
{
     $result = $db->fetchAll($query);
     $cache->save($result, $cache_query);
}

Используя кэш, вы устанавливаете собственные временные рамки для обновления данных для всех пользователей.

0 голосов
/ 24 ноября 2008

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

PHP сессий

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