Я читаю тему https://meta.stackexchange.com/questions/36728/how-are-the-number-of-views-in-a-question-calculated . Я понимаю алгоритм, но я не понимаю, как сделать эту вещь в MySQL, PHP.
Каждый раз, когда регистрируется новое попадание, оно также добавляется в буфер памяти в дополнение к истекающей записи в кэше. Срок действия самого буфера также истекает через несколько минут или после того, как он заполнен до определенного размера, в зависимости от того, что произойдет раньше. Когда он истекает, все, что он накопил, записывается в базу данных навалом. Они называют это «буферизованной схемой записи».
Мы используем Storage Engine -MEMORY в MySQL или, возможно, лучшее решение с MySQL, PHP.
Может кто-нибудь помочь мне, как «буферизованная схема записи» для счетчика просмотров с php, mysql.
Спасибо большое.
Ну, это не пойдет быстрее, чем MySQL.
Хранимая процедура для вашего запроса может ускорить процесс, но разработка базы данных — это другая половина.
Убедитесь, что у вас есть одна таблица для подсчета:
user_therad_visit:
----------------------------
user_id | thread_id | count
----------------------------
Убедитесь, что есть индекс или лучше двухстрочный уникальный индекс для столбцов «user_id» и «thread_id».
Когда пользователь входит в систему, прочитайте все его значения и thread_id и посчитайте значения и сохраните их в массиве $ _SESSION.
Таким образом, вы можете проверить с помощью $ _SESSION var, посетил ли пользователь страницу или нет, и просто игнорировать выборку базы данных, если он уже был здесь, это значительно сократит количество запросов.
Тогда просто не забудьте ОБНОВИТЬ вашу базу данных, если пользователь никогда не был в этом потоке, а также напрямую обновить массив $ _SESSION вручную.
С помощником запроса:
Вставить в таблицу (a, b, c) ЗНАЧЕНИЯ (1,2,3), (4,5,6)
ОБНОВЛЕНИЕ КЛЮЧЕВЫХ КЛЮЧЕЙ c = ЗНАЧЕНИЯ (a) + ЗНАЧЕНИЯ (b);
Вы можете просто объединить вставку и обновление (все, что нужно) в один запрос, что также повышает производительность.
Таким образом, запрос запускается только тогда, когда пользователь впервые входит в поток, и у вас нет другого выбора, кроме как записать его куда-нибудь, а база данных — один из самых быстрых способов сделать это.
Если ваши поля thread_id и user_id проиндексированы, вы должны работать с запросом SELECT довольно быстро, даже с миллионами строк в таблице.
Других решений пока нет …