У меня есть веб-сайт, в котором рейтинг пользователей занимает центральное место, но количество пользователей выросло до более чем 50 000, и это заставляет сервер перебирать все эти данные, чтобы обновлять рейтинг каждые 5 минут. Есть ли лучший метод, который можно использовать для простого обновления рангов по крайней мере каждые 5 минут? Это не обязательно должно быть с php, это может быть что-то, что запускается как скрипт perl, или что-то подобное, если что-то подобное сможет сделать работу лучше (хотя я не уверен, почему это так, просто оставив свой варианты открываются здесь).
Это то, что я сейчас делаю для обновления рангов:
$get_users = mysql_query("SELECT id FROM users WHERE status = '1' ORDER BY month_score DESC");
$i=0;
while ($a = mysql_fetch_array($get_users)) {
$i++;
mysql_query("UPDATE users SET month_rank = '$i' WHERE id = '$a[id]'");
}
ОБНОВЛЕНИЕ (решение):
Вот код решения, для выполнения и обновления всех 50 000 строк которого требуется менее половины секунды (сделайте ранжирование первичным ключом, как предложено Томом Хейем).
mysql_query("TRUNCATE TABLE userRanks");
mysql_query("INSERT INTO userRanks (userid) SELECT id FROM users WHERE status = '1' ORDER BY month_score DESC");
mysql_query("UPDATE users, userRanks SET users.month_rank = userRanks.rank WHERE users.id = userRanks.id");