«Схема буферизованной записи» для просмотра счетчика с php, mysql

Я читаю тему 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.

Спасибо большое.

0

Решение

Ну, это не пойдет быстрее, чем 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 довольно быстро, даже с миллионами строк в таблице.

0

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

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

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