powered by simpleCommunicator - 21.11.28     © 2024 Programmizd 02
Map
Форумы / Вопросы по форуму / Концепция отслеживания новых сообщений
20 сообщений из 20, страница 1 из 1
Концепция отслеживания новых сообщений
    #16386
Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Гидроцефалы всех стран соединяйтесь!
Концепция

Отслеживание новых сообщений начинается после первого входа на форум а не с начала времён. Запоминается дата первого входа на форум.

Посетитель ниразу не был в теме:
Если в теме форума появляются сообщения после даты первого входа на форум, тема помечается меткой "новые". При входе в тему запоминается дата последнего прочтенного сообщения. Поскольку движение глаз браузер отслеживать не может, последним прочтенным сообщением считается последнее сообщение, отгруженное клиенту в браузер.

Посетитель уже был в теме:
Если в теме форума появляются сообщения после даты последнего прочтенного сообщения, тема помечается меткой "новые". При входе в тему дата последнего прочтенного сообщения обновляется на новое значение.

Новыми не считаются:
  • Собственные сообщения
  • Удаленные сообщения
  • Сообщения от пользователей и гостей, находящихся в игноре
  • Сообщения в темах и форумах, находящихся в игноре
Эти нюансы ощутимо утяжеляют запрос и увеличивают время его выполнения.

Реализация

Для унификации гостей и пользователей, а также для поддержки информации о прочитанных после вылогинивания, используются так называемые ридмаркеры.

Ридмаркер выдается посетителю при первом заходе, если он еще не выдан.

Выданный ридмаркер сохраняется в куках для гостей, и в куках и в профиле для пользователей.

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

Решение проблемы распухания таблиц ридмаркеров

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

Многие боты, распознанные по юзер-агенту, не участвуют в отслеживании новых.

Введен параметр, ограничивающий период отслеживания новых.

Введено понятие последней активности ридмаркера. Ридмаркеры, неактивные дольше чем период отслеживания новых, удаляются.
Поэтому для долго отсутсвующих посетителей, при возврате на форум, отсчёт новых начинается с момента возврата на форум, а не с начала времен, т.е. как будто он вошел на форум первый раз.

Много ботов заходят на форумы, но не входят в темы. Ридмаркеры, неактивные дольше 1-го дня, у которых нет посещений тем, удаляются.

Хранить записи о прочитанных темах, которые старее периода отслеживания новых, нет смысла. Такие записи удаляются, а дата первого входа на форум подтягивается до даты начала отслеживания новых (now - new_check_period).

У активных читателей часто бывает ситуация, что он прочитал многие или все темы с новыми сообщениями. Для этих тем были созданы записи в таблице прочитнных тем, но очищены они будут лишь когда истечет период отслеживания новых, а до этого момента они будут просто мертвым грузом лежать в таблице и утяжелять ее. Чтобы этого не происходило, при проверке новых также вычисляется время первого непрочитанного поста. Все записи до этого времени больше не нужны и поэтому удаляются, а дата первого входа на форум подтягивается до этой даты.

Для анализа и мониторинга я сделал техническую статистику:

http://nosql.ru/forum/load_statistics.php

Кэширование

При загрузке основного контента проверка новых не осуществляется, таким образом контент поставлятся быстро и не тратися время на ожидание проверки новых. Если инфа о новых есть в кэше, то она берется из кэша.

Реализована периодическая проверка новых в фоновом режиме. Этот скрипт подкачивает тэги [новые] в страницу. Первый раз проверка запускается сразу после загрузки и далее каждые N секунд. Благодаря тому что первый запуск фоновой проверки новых осуществляется сразу после загрузки основной страницы, устаревшая инфа, взятая основным скриптом из кэша, обновляется актуальной инфой буквально через 1-2 секунды.

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

Реализована процедура гранулярной инвалидации кэша информации о прочитанных, по мере прочтения топиков.

Отображение

Топики с новыми сообщениями бывают 2х видов:

Просто топики с новыми сообщениями

Топики, которые ты уже посещал, и в них появились новые сообщения.

Совсем новые топики с новыми сообщениями

Новосозданные топики, в которых ты не разу не был. Метка новые у этих топиков несколько отличается по цвету.
...
Изменено: 01.01.2022, 01:29 - Программизд 02
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16395
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
Программизд 02,

деда сломал форум... :(((
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16396
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
Гарыныч,
Цитата 
Ошибка в SQL запросе!

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND V1_TOPIC.FORUM_ID IN (2,3,6,7,9) AND V1_TOPIC.DELETED = '0' AND (RESTRICTED_' at line 9

SELECT COUNT(*) CNT
FROM
V1_TOPIC
INNER JOIN V1_FORUM ON (V1_TOPIC.FORUM_ID = V1_FORUM.ID)
LEFT JOIN V1_TOPIC_READ_MARKERS ON (V1_TOPIC.ID = V1_TOPIC_READ_MARKERS.TOPIC_ID AND V1_TOPIC_READ_MARKERS.READ_MARKER = 'bd87d48ca78e865b19337ea4de3b2844')
LEFT JOIN V1_FORUM_READ_MARKERS ON (V1_TOPIC.FORUM_ID = V1_FORUM_READ_MARKERS.FORUM_ID AND V1_FORUM_READ_MARKERS.READ_MARKER = 'bd87d48ca78e865b19337ea4de3b2844')
WHERE

AND V1_TOPIC.FORUM_ID IN (2,3,6,7,9) AND V1_TOPIC.DELETED = '0' AND (RESTRICTED_ACCESS = '0' OR
V1_FORUM.ID IN (SELECT FORUM_ID FROM V1_FORUM_MODERATOR WHERE USER_ID = 37) OR
V1_FORUM.ID IN (SELECT FORUM_ID FROM V1_FORUM_MEMBER WHERE USER_ID = 37)
)

AND V1_TOPIC.LAST_MESSAGE_DATE > V1_FORUM_READ_MARKERS.FIRST_READ_DATE
AND (V1_TOPIC_READ_MARKERS.LAST_READ_DATE IS NULL OR V1_TOPIC.LAST_MESSAGE_DATE > V1_TOPIC_READ_MARKERS.LAST_READ_DATE)

HAVING COUNT(*) > 0
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16398
Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Гидроцефалы всех стран соединяйтесь!
Гарыныч,

уже починил. Спасибо за репорт.

Возникало только если у чела в профиле есть предпочитаемы форумы.
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16400
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
Программизд 02,

блин, надо было оставить такой фичу :)))
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16409
Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Гидроцефалы всех стран соединяйтесь!
Так фича осталась, бага исправлена:)
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16911
Пашэ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программизд 02 
Поступали жалобы и иногда сам замечал, что механизм работает не всегда корректно. Возможно когда речь шла об удаленных, перенесенных или игнорируемых постах.

Большая просьба сообщать о замеченных ошибках в работе метки [новые].

В общем логика работы такая. Когда темы начинают помечаться тэгом [новые].

Чел первый раз зашел на форум. Дата первого входа запоминается. Всё. Трэкинг по форуму начался. Если в темах форума появляются новые посты после этой даты, то эти темы для чела помечаются тэгом [новые]. Первы новым постом в теме считается первый пост после этой даты.

Если чел заходит в топик, то сохраняется дата последнего прочитанного сообщения (последнего сообщения на странице). Если позже в теме появились сообщения после этой даты, то тема для чела помечается тэгом [новые].

Если идет переход на сообщение, которое оказалось удалено, перенесено вдругую тему или автор в игноре у посетителя, то ищется следующее валидное сообщение в теме и переходит к нему.

Если следующего валидного сообщения не найдено, то ищется самое новое валидное из предыдущих постов и переходит к нему.
У деды большая просьба, а я ничего не сообщил. Понимаю как деду от этого куёво - это когда я прошу поискать баг в пашэтанках, а всем покуй!
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16913
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
Программизд 02 
Так фича осталась, бага исправлена:)
кто тут?
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16922
Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Гидроцефалы всех стран соединяйтесь!
Пашэ,

Я просил не поискать, а сообщать если случится. Так что всё ок.

Раньше у меня иногда переход по [новые] сбоил, сейчас пока больше не сбоит. Видимо работает.
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16958
Пашэ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программизд 02 
Пашэ,

Я просил не поискать, а сообщать если случится. Так что всё ок.

Раньше у меня иногда переход по [новые] сбоил, сейчас пока больше не сбоит. Видимо работает.
Вчера я в игнор заносил одно тело.
Потом оно насрало в топик X, он подсветился "новые". Захожу - пусто.
Но деталей не помню, потому не сообщаю.
...
Изменено: 24.11.2016, 20:51 - Пашэ
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16960
Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
Программизд 02,

дед, нужна ещё шлифовка...

например, тема из 3-х (до 12-ти) строниц, я открываю - все строницы топика, цицирую како-нить пост,
меня в резалте кидает на одну(конкретную) страницу ( ту, в которой цицируемый пост...)
ты не запоминаешь , в каком режиме открыт топик? :(((
...
Изменено: 24.11.2016, 20:50 - Гарыныч
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16966
Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Гидроцефалы всех стран соединяйтесь!
Пашэ 
Программизд 02 
Пашэ,

Я просил не поискать, а сообщать если случится. Так что всё ок.

Раньше у меня иногда переход по [новые] сбоил, сейчас пока больше не сбоит. Видимо работает.
Вчера я в игнор заносил одно тело.
Потом оно насрало в топик X, он подсветился "новые". Захожу - пусто.
Но деталей не помню, потому не сообщаю.
Раньше при таком случае кидало в начало. Сейчас - на следующее валидное или если его нет, то на предыдущее валидное. Можно конечно подумать чтобы выставлять маркер новые с учетом игнора и удаления. Это конечно утяжелит запросы.

Сейчас сделано так. В таблице ридмаркеров есть дата последнего прочитанного юзером поста в теме. У темы есть дата последнего поста. Если она больше то ставим нью.
...
Изменено: 24.11.2016, 21:00 - Программизд 02
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #16967
Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Гидроцефалы всех стран соединяйтесь!
Гарыныч 
Программизд 02,

дед, нужна ещё шлифовка...

например, тема из 3-х (до 12-ти) строниц, я открываю - все строницы топика, цицирую како-нить пост,
меня в резалте кидает на одну(конкретную) страницу ( ту, в которой цицируемый пост...)
ты не запоминаешь , в каком режиме открыт топик? :(((
Нет. И не планирую. Открытие в режиме "все" это каждый юзер решает сам. Это я не навязываю ссылкой. Кроме того, тема может разрастись что вообще режим все будет недоступен.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Концепция отслеживания новых сообщений
    #650035
Владайка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется быть немножко сумасшедшей, а получается множко.
Пашэ  24.11.2016, 19:48
Программизд 02 
Поступали жалобы и иногда сам замечал, что механизм работает не всегда корректно. Возможно когда речь шла об удаленных, перенесенных или игнорируемых постах.

Большая просьба сообщать о замеченных ошибках в работе метки [новые].

В общем логика работы такая. Когда темы начинают помечаться тэгом [новые].

Чел первый раз зашел на форум. Дата первого входа запоминается. Всё. Трэкинг по форуму начался. Если в темах форума появляются новые посты после этой даты, то эти темы для чела помечаются тэгом [новые]. Первы новым постом в теме считается первый пост после этой даты.

Если чел заходит в топик, то сохраняется дата последнего прочитанного сообщения (последнего сообщения на странице). Если позже в теме появились сообщения после этой даты, то тема для чела помечается тэгом [новые].

Если идет переход на сообщение, которое оказалось удалено, перенесено вдругую тему или автор в игноре у посетителя, то ищется следующее валидное сообщение в теме и переходит к нему.

Если следующего валидного сообщения не найдено, то ищется самое новое валидное из предыдущих постов и переходит к нему.
У деды большая просьба, а я ничего не сообщил. Понимаю как деду от этого куёво - это когда я прошу поискать баг в пашэтанках, а всем покуй!
Тебе покуй и на не баги.
...
Зачем платить психотерапевту, если его можно придумать, и разговаривать с ним совершенно бесплатно?
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #928565
Чучело Дрючело
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пришло за тобой...
Деда, а почему я не вижу в приличном трепе как обновляются темы и сам приличный трёп у меня серый, как и несколько других форумов
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #928566
Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Гидроцефалы всех стран соединяйтесь!
Чучело Дрючело  01.02.2019, 08:12
Деда, а почему я не вижу в приличном трепе как обновляются темы и сам приличный трёп у меня серый, как и несколько других форумов
Потому что ты выставил предпочитаемые форумы а приличный треп не поместил в их список.
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #941116
qwerty1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программизд 02  23.11.2016, 20:22
Концепция

Отслеживание новых сообщений начинается после первого входа на форум. Запоминается дата первого входа на форум.

Посетитель ниразу не был в теме:
Если в теме форума появляются сообщения после даты первого входа на форум, тема помечается меткой "новые". При входе в тему запоминается дата последнего прочтенного сообщения. Поскольку движение глаз браузер отслеживать не может, последним прочтенным сообщением считается последнее сообщение, отгруженное клиенту в браузер.

Посетитель уже был в теме:
Если в теме форума появляются сообщения после даты последнего прочтенного сообщения, тема помечается меткой "новые". При входе в тему дата последнего прочтенного сообщения обновляется на новое значение.

Новыми не считаются:
  • Собственные сообщения
  • Удаленные сообщения
  • Сообщения от пользователей и гостей, находящихся в игноре
  • Сообщения в темах и форумах, находящихся в игноре
Эти нюансы ощутимо утяжеляют запрос и увеличивают время его выполнения.

Реализация

Для унификации гостей и пользователей, а также для поддержки информации о прочитанных после вылогинивания, используются так называемые ридмаркеры.

Ридмаркер выдается посетителю при первом заходе, если он еще не выдан.

Выданный ридмаркер сохраняется в куках для гостей, и в куках и в профиле для пользователей.

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

Решение проблемы распухания таблиц ридмаркеров

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

Многие боты, распознанные по юзер-агенту, не участвуют в отслеживании новых.

Введен параметр, ограничивающий период отслеживания новых.

Введено понятие последней активности ридмаркера. Ридмаркеры, неактивные дольше чем период отслеживания новых, удаляются.

Много ботов заходят на форумы, но не входят в темы. Ридмаркеры, неактивные дольше 1-го дня, у которых нет посещений тем, удаляются.

Хранить записи о прочитанных темах, которые старее периода отслеживания новых, нет смысла. Такие записи удаляются, а дата первого входа на форум подтягивается до даты начала отслеживания новых (now - new_check_period).

У активных читателей часто бывает ситуация, что он прочитал многие или все темы с новыми сообщениями. Для этих тем были созданы записи в таблице прочитнных тем, но очищены они будут лишь когда истечет период отслеживания новых, а до этого момента они будут просто мертвым грузом лежать в таблице и утяжелять ее. Чтобы этого не происходило, при проверке новых также вычисляется время первого непрочитанного поста. Все записи до этого времени больше не нужны и поэтому удаляются, а дата первого входа на форум подтягивается до этой даты.

Для анализа и мониторинга я сделал техническую статистику:

http://nosql.ru/forum/load_statistics.php

Кэширование

При загрузке основного контента проверка новых не осуществляется, таким образом контент поставлятся быстро и не тратися время на ожидание проверки новых. Если инфа о новых есть в кэше, то она берется из кэша.

Реализована периодическая проверка новых в фоновом режиме. Этот скрипт подкачивает тэги [новые] в страницу. Первый раз проверка запускается сразу после загрузки и далее каждые N секунд. Благодаря тому что первый запуск фоновой проверки новых осуществляется сразу после загрузки основной страницы, устаревшая инфа, взятая основным скриптом из кэша, обновляется актуальной инфой буквально через 1-2 секунды.

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

Реализована процедура гранулярной инвалидации кэша информации о прочитанных, по мере прочтения топиков.

Отображение

Топики с новыми сообщениями бывают 2х видов:

Просто топики с новыми сообщениями

Топики, которые ты уже посещал, и в них появились новые сообщения.

Совсем новые топики с новыми сообщениями

Новосозданные топики, в которых ты не разу не был. Метка новые у этих топиков несколько отличается по цвету.
Деда, ты такой умный,сам это все придумал?
За бесплатно все это кодишь?
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #941137
Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Гидроцефалы всех стран соединяйтесь!
qwerty1111  05.02.2019, 22:19
сам это все придумал?
Да.
qwerty1111  05.02.2019, 22:19
За бесплатно все это кодишь?
Форум да за бесплатно. Пока за него денег не поимел.
...
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #941142
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нихрена не умеешь ? Забей !
Будь как Пошэ - склипиздень двужопостворчатый !
Программизд 02  05.02.2019, 22:33
qwerty1111  05.02.2019, 22:19
сам это все придумал?
Да.
qwerty1111  05.02.2019, 22:19
За бесплатно все это кодишь?
Форум да за бесплатно. Пока за него денег не поимел.
Ordnung !
...
Гарыныч сказал - Гарыныч спиздел
#деда#ослег#подослали

на чём бы я не осуществлял бы или осуществлял бы, объяснял бы или не объяснял бы, СОСТОЯНИЕ СИТУАЦИИ ВСЁ РАВНО ОТ ЭТОГО НЕ ИЗМЕНИЛОСЬ БЫ (с) Кикки
Рейтинг: 0 / 0
Концепция отслеживания новых сообщений
    #941279
qwerty1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программизд 02  05.02.2019, 22:33
qwerty1111  05.02.2019, 22:19
сам это все придумал?
Да.
qwerty1111  05.02.2019, 22:19
За бесплатно все это кодишь?
Форум да за бесплатно. Пока за него денег не поимел.
Зато огромная творческая самореализация
Кодить так тяжеловато. Особенно в голове все это держать после работы.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Вопросы по форуму / Концепция отслеживания новых сообщений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (8): Анонимы (6), Yandex Bot 1 мин., Bing Bot 4 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]