Страница 2 из 2

Re: минусовое количество сообщений

Добавлено: 25 фев 2015, 16:10
Gorlum
Проблема мелкая, проблема известная, проблема легко не решается - надо делать отдельно систему "прочитанных"/"непрочитанных" сообщений, что бы адекватно всегда отображались цифры. Время потребуется слишком много для такой мелкой неудобности - но стоит в туду вместе с переделкой работы с сообщениями

Re: минусовое количество сообщений

Добавлено: 26 ноя 2015, 09:10
Gorlum
На всякий случай, что бы не писать каждому по-новому.

tl;dr - Баг известен. Его устранение сейчас - займёт слишком много времени, которые можно уделить более важным частям СН. На игру особо не влияет - поэтому баг не является приоритетным

Баг с отрицательным количеством сообщений в навбаре (панелька вверху, плашка с конвертиком) - очень давно известен.

Бороться с ним очень легко: заходите на страницу сообщений, там открываете ссылку "Все сообщения" - баг уйдёт. Как побочный эффект - сбросятся так же счетчики оповещений о прочтении в остальных категориях сообщений. Так что желательно почитать, что же там понаписывали в остальных категориях.

Источник бага примерно известен - он возникает при чистке базы и иногда - при пересчете статистики. Суть бага - в неправильной изначальной реализации счётчика сообщений. Немного об этом подробнее.

Сейчас счётчики сообщений хранятся в записи об игроке. Таким образом, мы всегда их получаем без лишнего обращения к БД - считай, бесплатная операция. При отсылке сообщений указанной категории параллельно увеличиваются счётчики количеств всех непрочитанных сообщений и непрочитанных сообщений в данной категории.

И вот тут зарыта подлянка: кроме этих счётчиков нет НИКАКИХ данных о статусе сообщений. Т.е. когда процедура обслуживания удаляет устаревшие сообщения (а она делает это массово одним запросом) - то пропадает синхронизация со счётчиками. Есть несколько путей решения.

Если идти постройкой костылей - можно выбирать по каждому пользователю количество удаляемых сообщений при обслуживании и вычитать именно это число из счётчика. Я пробовал - получается неприемлемо медленно. Неприемлемо - потому что в разы увеличивает время обслуживания и обсчёта статистики

Если идти правильным путём - в таблице messages должно быть отдельное поле для статуса сообщения. При каждом обращении в счётчику (т.е. при каждом открытии страницы) нужно сканировать все категории сообщений и подсчитывать непрочитанные. На круг это будет быстрее, чем вставить код в статистику. Но по итогу это будет гораздо медленнее - ведь код будет вызываться каждую загрузку страницы и, вдобавок, это заметно увеличит загрузку mysql сервера - таблица с сообщениями является самой большой таблицой в игре как по количеству записей так и по абсолютному размеру

По уму - нужно добавлять какое-то кэширование к счётчику и привязывать к нему события изменения количества сообщений и/или пересчета. Но по предварительным прикидкам - получается слишком громоздко и много работы

Интуитивно я чувствую, что есть какой-то красивый, быстрый и аккуратный способ сделать корректную работу счётчиков. Но конкретный алгоритм с момента багрепорта не нарисовался до сих пор.

Поэтому я пока решил переместить этот баг в "задокументированные" и вернуться к его исправлению либо когда придумаю алгоритм, либо когда буду переделывать всю систему сообщений - что, в целом, надо сделать раньше или позже. Тем более, что есть простой и безопасный способ избавления от проявлений бага и на игру он особо не влияет (хотя и неаккуратненько, да)

Re: минусовое количество сообщений

Добавлено: 12 мар 2018, 18:30
Gorlum
ап