Как делают на форумах "отметить сообщение прочитанным"?
ну посмотри ты исходники....
И не обязательно добавлять непросмотренные, можно добавлять для каждой записи мпросмотревших ее юзеров...
Это будет гораздо экономичнее..
И не обязательно добавлять непросмотренные, можно добавлять для каждой записи мпросмотревших ее юзеров...
Это будет гораздо экономичнее..
10^7 сообщений, и 10^4 пользователей
получается 10^11 бит нужно хранить
многовато
получается 10^11 бит нужно хранить
многовато
мпросмотревшихКаких? От этого многое зависит.
просмотревших эту запись...
Посмотри, по крайней мере в этом форуме я представляю себе так, создается сообщение и на его ид цепляется привязка таблицы с просмотревшими это сообщение пользователями... И пока ты его не посмотрел, у тебя оно отображается непрочитаным (как у анонимуса после того как ты его просмотрел, у тебя твой ид заноситься в таблицу просмотров...
ЗЫ а т.к. просмотр у нас возможен за месяц мах - значит все записи старше месяца удаляются...
Посмотри, по крайней мере в этом форуме я представляю себе так, создается сообщение и на его ид цепляется привязка таблицы с просмотревшими это сообщение пользователями... И пока ты его не посмотрел, у тебя оно отображается непрочитаным (как у анонимуса после того как ты его просмотрел, у тебя твой ид заноситься в таблицу просмотров...
ЗЫ а т.к. просмотр у нас возможен за месяц мах - значит все записи старше месяца удаляются...
У сообщений есть уникальные номера, которые равномерно растут. При условии, что юзер читает сообщения последовательно, нужно просто увеличивать номер последнего прочитанного сообщения в его профайле. Если он читает непоследовательно, то возникают дыры, которые нужно отдельно описывать. Чем более "дыряво" юзер читает, тем больше на него тратится памяти. Но, среднестатистически дыр будет не так уж много. Кроме того, на всех форумах (включая и этот) по прошествии времени Х, все старые сообщения считаются прочитанными. Таким образом удаляются дыры в прошлом и средний расход памяти не растет с течением времени. Растет только с увеличением userbase и уровнем пиздобольства в форуме.
Пример реализации - читалка новостей tin, которая именно в таком формате хранит файл .newsrc.
Пример реализации - читалка новостей tin, которая именно в таком формате хранит файл .newsrc.
Можно всю эту инфу(о прочитанных сообщениях) в куках на клиенте хранить и обрабатывать только на клиенте 

описывать дыры, этот момент поподробнее пожалуста...
Вот пример моего .newsrc:
fido7.ru.unix.bsd и fido7.ru.unix я читаю полностью, а fido7.ru.unix.prog выборочно.
fido7.ru.unix.bsd: 1-211503
fido7.ru.unix.prog: 1-17023,17063-17064,17070,17081,17097,17099,17103,17126,17139-17141
,17157,17164,17172,17469-17470,17472-17474,17482,17493,17495,17497,17499-17501,17509,17
526,17547-17549,17553,17692,17694,17697,17699,17702,17704,17711,17719-17720,17722-17724
,17735-17736,17740,17747,17832,17843-17844,17854,17859,17907,17985,17988-17989,18025,18
035,18045,18051,18078,18087-18088,18091-18097,18105,18110,18127,18129,18134,18141-18142
,18144
fido7.ru.unix: 1-117904
fido7.ru.unix.bsd и fido7.ru.unix я читаю полностью, а fido7.ru.unix.prog выборочно.
Я немного думал над этим (чтоб для этого форума адаптировать и более перспективным (cжатие лучше) представляется некий вариант RLE.
Вот кстати прикольная реализация аналогичной задачи (но не подходит в данном случае): unit allocator в FreeBSD.
Оставить комментарий
Elina74
Поискал в инете, нашел, например такое:Т.е. у каждого пользователя в базе данных должна быть запись с номерами сообщений, которые этот пользователь еще не читал. Причем:
1. При создании пользователя эта запись пуста.
2. При разлогинивании эта запись очищается полностью.
3. При добавлении любого сообщения в форум информация о номере этого сообщения записывается в запись каждого пользователя форума.
4. Как только пользователь затребует страницу на которой есть сообщение с номером, который есть в записи, этот номер из записи удаляется.
Если так, то вопрос: как эту запись реализовать в базе данных?