Отслежевание новых комментариев

JIEXA

Новичок
Отслежевание новых комментариев

Объяснять думаю не стоит, все наверняка видели на сайтах такую вещь: "комментариев: 10, новых: 3".
То есть мне нужно для каждого юзера отслеживать кол-во новых комментариев(новыми считаются те, которые он не прочитал).

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

zerkms

TDD infected
Команда форума
1. время авторизации. то что позже - новые
2. в сессиях хранить те, которые посмотрел позже времени авторизации
 

JIEXA

Новичок
Автор оригинала: WP
Нормальное решение и вовсе не громоздкое.
Нормальное?? Представим, что на странице 100 комментариев, когда человек просмотрит пост в БД добавиться 100 записей, у меня сейчас примерно 2-3 тыс просмотров на каждый пост: 100*3000=300 000 записей за каждый пост, постов сейчас около 15 тыс. = 300 000*15 000 = 3 млрд записей!! А теперь у меня на странице выводиться по 20 постов и у каждого нужно вывести сколько новых постов... в итоге получается будет 20 раз производится поиск по таблице с 20 млрд записей!! Это ооочень большая нагрузка!
 

dimagolov

Новичок
JIEXA, пиши не прочитанные а непрочитанные комментарии и не для всех юзеров, а тех, кто логинился последние 3 дня к примеру. кто логинится после большего перерыва отбирай в непрочитанные те, которые написаны за эти 3 дня. по крону можно убивать "старое непрочитанное", а после прочтения убивать запись из таблицы не читаных. тогда получить отметки "новые" можно будет LEFT JOIN ON Tred = NewTread AND User = NewTreadUser
при таком подходе кол-во "новых" всегда будет ограничено "кол-во разных юзеров за 3 дня" Х "кол-во обновленных за 3 дня топиков"
 

WP

^_^
JIEXA
Бугога. Во-первых нагрузку измерять количеством рядов это жестко, во вторых про 100 записей это твои фантазии, достаточно записать id группы. Если не устроит вариант таблицы хранящей записи о просмотрах новых тем (скажем неделю) и с выборкой по индексу, можно сделать для каждого юзера blob в котором хранить id просмотренных тем.
И правда, не ори, если руки кривые будет большая нагрузка, а если нет то всё ок.
 

Nicholas

Новичок
JIEXA, для тех, кто авторизован, запоминай время последнего посещения. Либо для всех пользователей запоминай время последнего посещения страницы в куку.

Все темы, созданные после данного времени, считай непрочитанными этими пользователеми.

Элементарно ватсон :)
 

Фанат

oncle terrible
Команда форума
WP
речь не о темах, а о комментариях.
то есть, тот же форум.

Nicholas
это решение, которым ты решил всех тут поразить, действительно элементарное и очевидное.
и по большому счету, к непрочитанным отношения не имеет, а сигнализирует только о "новых", то есть, появившихся с момента его ухода.

вопрос - что именно нужно автору тему - новые или непрочитанные. он, по-моему, сам еще не разобрался
 

JIEXA

Новичок
Сорри, не кричал)

to Фaнaт, нужны непрочитанные.

-~{}~ 15.08.07 05:19:

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

-~{}~ 15.08.07 05:28:

dimagolov, вариант записывать для каждого юзера непрочитанные комменты не катит, потому что при добавление коммента придеться в таблицу добавлять запись для каждого юзера, что у него непрочитанный коммент. То есть тут таблица будет заметно расти, если юзеров к примеру 20.000, то за каждый коммент + 20к строк в БД.

Сейчас рассматриваю два варианта:
1. Записывать в отдельную таблицу все прочитанные комменты юзером, в постах, которые не старше 2х дней.
2. как предложил WP, создать TEXT поле в таблице с юзерами и класть туда сериализованный массив всех прочитанных комментов за 2 дня.

Какой по сути метод будет быстрее? Первый или второй?
 

zerkms

TDD infected
Команда форума
ужас...... реализация того, что 95% людей даже не заметит отнимает столько времени....
ps: вариант 2 - отстой
 

JIEXA

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

Фанат

oncle terrible
Команда форума
хаха! друкс, как зеркало отечественного сайтостроения =)
 
Сверху