[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Хранения информации о прочитаных темах форума
savelikan
Привет всем! Вопрос у меня такой: как лучше хранить информацию о прочитаных/непрочитаных темах на форуме сайта? Чтоб не сильно нагружало сервер?

_____________
Одесса - мой город!)))
FatCat
У нас она хранится... в куках. Ибо количество таких тем не велико.

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

_____________
Бесплатному сыру в дырки не заглядывают...
Michael
Цитата (FatCat)
У каждого пользователя в профиле хранится time() прошлого посещения.

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

_____________
There never was a struggle in the soul of a good man that was not hard
FatCat
Цитата (Michael @ 21.12.2014 - 08:56)
Есть же старые темы которые он и не смотрел вообще, они непрочитанные.

Это хорошо для маленького форума.
По мере роста количества тем на форуме и количества пользователей на форуме, информация о прочтении тем будет расти в геометрической прогрессии.
По опыту движков, хранящих эту информацию в БД, при достижении примерно 100 К сообщений в БД форума и 5-10 К пользователей, нагрузка от обращения к таблице просмотров начинает превышать суммарную нагрузку всех остальных действий по генерации страницы форума.

_____________
Бесплатному сыру в дырки не заглядывают...
savelikan
Цитата (FatCat @ 21.12.2014 - 15:14)
Цитата (Michael @ 21.12.2014 - 08:56)
Есть же старые темы которые он и не смотрел вообще, они непрочитанные.

Это хорошо для маленького форума.
По мере роста количества тем на форуме и количества пользователей на форуме, информация о прочтении тем будет расти в геометрической прогрессии.
По опыту движков, хранящих эту информацию в БД, при достижении примерно 100 К сообщений в БД форума и 5-10 К пользователей, нагрузка от обращения к таблице просмотров начинает превышать суммарную нагрузку всех остальных действий по генерации страницы форума.

И как быть? Как они хранятся, например в mybb, punbb, phpbb?

_____________
Одесса - мой город!)))
FatCat
Цитата (savelikan @ 21.12.2014 - 18:13)
И как быть?

Брать пхпББ и не париться. Там всё хранится в БД.
999 шансов из 1000, что форум никогда не дорастет до размера
Цитата (FatCat @ 21.12.2014 - 16:14)
100 К сообщений в БД форума и 5-10 К пользователей

А если/когда всё же дорастет, ты уже 20 раз перепишешь весь движок форума, или перейдешь на другой движок, или просто напишешь свой движок с нуля.

Я так же начинал в 2006-м с ИПБ 1.3; практически весь его переписал за эти годы, исходного кода на сегодня в движке осталось наверное процентов 5...

_____________
Бесплатному сыру в дырки не заглядывают...
savelikan
Цитата (FatCat @ 21.12.2014 - 17:40)
Цитата (savelikan @ 21.12.2014 - 18:13)
И как быть?

Брать пхпББ и не париться. Там всё хранится в БД.
999 шансов из 1000, что форум никогда не дорастет до размера
Цитата (FatCat @ 21.12.2014 - 16:14)
100 К сообщений в БД форума и 5-10 К пользователей

А если/когда всё же дорастет, ты уже 20 раз перепишешь весь движок форума, или перейдешь на другой движок, или просто напишешь свой движок с нуля.

Я так же начинал в 2006-м с ИПБ 1.3; практически весь его переписал за эти годы, исходного кода на сегодня в движке осталось наверное процентов 5...

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

_____________
Одесса - мой город!)))
FatCat
Цитата (savelikan @ 21.12.2014 - 18:47)
хочу понять, как мне хранить информацию о непрочитаных темах

Давайте считать. "Граничные" цифры, полученные эмпирически, я назвал.

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

100 К сообщений - это от 10 до 20 К топиков. Возьмем минимальную цифру 10 К.
Умножаем на 10 К юзеров. Получаем 100 млн. Сто миллионов строк в таблице просмотра тем.

Можно сэкономить, и не хранить строки с темами, в которые юзер ни разу не заглядывал. На практике, это сэкономит до 90%. У нас получается не 100, а "всего" 10 млн строк.

Понятно, что поля "юзер" и "тема" - это айдишники, и они проиндексированы. Иначе форум умрет от тормозов намного раньше.

_____________
Бесплатному сыру в дырки не заглядывают...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.