Как оптимизировать UPDATE + 1?

Для сбора статистики просмотров сейчас используется конструкция UPDATE + 1.
Однако, в последнее время, эта операция работает слишком медленно и нужно ее как-то оптимизировать.

Первое, что пришло в голову, это хранить данные в memcached и записывать в бд сразу UPDATE + 100..
Есть ли еще какие-либо решения для высоконагруженных проектов?
  • Вопрос задан
  • 277 просмотров
Решения вопроса 2
@grisha2217
insert delayed into tmp_table
По крону брать все записи из временной таблицы, считать количество записей и делать апдейт счетчика

Почему это быстрее?
Вставка строчки не блокирует твою запись в таблице. Вызов апдейта будет лишь по крону. Такое решение есть в XenForo
Ответ написан
romesses
@romesses
Backend инженер
Прямо таки, узкое место именно в Memcached? У вас точно не из-за блокировок в коде задержка?
Сколько процессов или потоков может обновить значение счетчика?

Вообще, для увеличения счетчика используют incr.

Добавлено
Так вы используете еще и MySQL (только прочел в тегах). Ну да, можно использовать Memcached как счетчик. Но минус в том, что при рестарте данные пропадут. Так что можете взять Redis и делать то же самое.

Добавлено
Если вас интересует техника сохранения данных в Redis с минимизацией потерь, то есть статья
https://softwareengineering.stackexchange.com/ques...
Если же есть больше предпочтение работы с MySQL, то можно настроить репликацию так, что для записи счетчиков будет использоваться записью в мастер, а чтение счетчиков с реплики.
Плюс еще статья https://www.percona.com/blog/2007/07/01/implementi...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы