mysql — Каков наилучший способ обработки пользовательской статистики в переполнении стека

Как бы я обрабатывал пользовательскую статистику в PHP?

Есть два очевидных метода, которые я могу выбрать. У обоих есть свои недостатки.

  • Выберите MySQL COUNTs при необходимости. Недостаток здесь в том, что если у вас есть много строк для подсчета, то это может быть медленным, особенно когда вам приходится делать это при каждой загрузке страницы. Преимущество в том, что счет всегда будет правильным.

  • Храните пользовательскую статистику в таблице статистики. Недостаток заключается в том, что вам необходимо постоянно обновлять его всякий раз, когда вносятся изменения, и это делает код чрезмерно сложным, если вам нужно выполнить массовое обновление. Преимущество состоит в том, что для пользователя будет быстро выбрать один ряд статистики, а не выполнять подсчет.

Другой возможный метод, о котором я немного «а», — это сохранение задания в очереди (и Laravel справится с этим). Эти задания обновят статистику, необходимую с использованием других таблиц, чтобы она правильно синхронизировалась. Преимущество заключается в том, что он снимает нагрузку с веб-сервера, и недостаток в том, что пользователь может получить неверную статистику. Не желательно для ваш собственный список друзей, чтобы сказать, что есть, например, 15 друзей и 7 запросов на добавление в друзья, когда фактические числа сильно различаются.

Я подробно описал методы, которые придумали, и не уверен, что лучше с точки зрения предоставления правильных результатов для пользователя, а также баланса скорости и простоты. Если я использую метод COUNT, то потенциально я мог бы кэшировать результат и удалить запись кэша, если статистика должна быть обновлена, но я представляю, что сохранение строки в таблице кэша для КАЖДОГО пользователя — это немного излишне. Может быть, это на самом деле не проблема, если в базе данных достаточно места, но, конечно, поиск в огромной таблице кеша будет медленным?

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

Заранее спасибо.

4

Решение

Не преувеличивайте стоимость COUNT(*) как вы планируете эту часть вашего приложения. Если в вашей таблице указан правильный индекс, подсчет строк выполняется очень быстро. Фактически, если ваша таблица MyISAM, она может иметь сложность O (1).

Например, если у вас есть индекс на user запрос SELECT COUNT(*) AS num FROM friend WHERE user = '[email protected]' будет очень быстро

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

Будьте осторожны, хотя. COUNT (*) в большинстве случаев намного быстрее, чем COUNT (выражение). * Позволяет MySQL избегать оценки каждой строки.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]