Рекомендации по улучшению производительности сайта - PHP / MySQL - PullRequest
1 голос
/ 10 августа 2011

Некоторое время назад мы написали внутренний веб-сайт, который постоянно обновлял всех пользователей, регистрирующихся на нашем веб-сайте.Сайт предоставил информацию о пользователях, зарегистрированных за последние 5 минут, которые нуждались в постоянных выборках SQL (select * from users...), чтобы получить ВСЕХ пользователей where (Current time - Registered time) <= 300 seconds.Со временем постоянные запросы SQL стали узким местом (не то чтобы мы не знали, что этого не произойдет, но тогда нам был нужен внутренний сайт, поскольку целевая аудитория была очень мала, и это было быстрое решение).

Может ли кто-нибудь дать мне советы о том, как можно устранить периодические выборки SQL с помощью другого решения, способного улучшить производительность веб-сайта?

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Кэширование - это опция, обычно рассматриваемая здесь.Многие выбрали мембрану (расширение memcached), кэш-память ключей в памяти с возможностью сохранения на диске и очень хорошо масштабируется.Клиентская библиотека PHP доступна на веб-сайте Couchbase , и вы обнаружите, что кэширование вещей превращает запросы 1 с + в субмиллисекунды.API также довольно прост:

    $mc = new Memcached;
    $mc->addServer("localhost", 11211);
    $mc->set("a", 1); // set a 1 to the key 'a'
    $mc->get("a"); // retrieve value at key 'a'
3 голосов
/ 10 августа 2011

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

Кэшируйте всех, кто регистрируется и ВСТАВЛЯЕТ в базу данных после того, как либо определенное число помещено в очередь, либо достигнут фиксированный период времени.

2 голосов
/ 10 августа 2011

Чтобы решить эту конкретную проблему, кэширование результата, вероятно, является лучшим решением.Его нужно кэшировать всего на несколько секунд - большинство людей не заметят, если данные отстают до 10 секунд.В зависимости от приложения вы можете избежать задержки в 10 минут.

Другая половина кэширования дорогостоящего запроса заключается в том, что вам необходимо добавить флаг к вашим кэшированным данным, чтобы они отображались при обновлении.Это останавливает несколько потоков, решающих, что они устарели, и все они загружают обновление.Для этого вам нужен только один поток!

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