Модератор


Зарегистрирован: Sep 2002
Место проживания:
Публикаций: 470
Статус:  |
Тут на самом деле проблема не в нагрузке, а в способе хранения.
О нагрузке можно забыть сделав так, чтобы "счетчик" сообщений в каждом форуме у пользователя обновлялся когда этот пользователь оставляет новое сообщение. Т.е. в таком случае не придется грузить базу просчетами - это придется сделать только 1 раз, чтобы посчитать те сообщения, что уже есть на форумах.
Проблема в том - где хранить эти счетчики. Ведь этих счетчиков у каждого пользователя может быть несколько (допустим, если на форуме 10 разделов - у каждого пользователя - 10 счетчиков). Плюс к этому, надо учитывать что структура форума может изменяться (добавляться/удаляться разделы) - соотв. то же должно происходить и со счетчиками.
Вариантов пока три, наиболее оптимальный третий, но перечислю все:
1) Хранить счетчики "упаковаными" (implode(), explode()) - потребуется добавить всего лишь 1 поле для каждого пользователя в БД. Основной минус - страшный гемморой при изменении структуры разделов (вместо простого запроса к БД придется обрабатывать каждую запись в БД, распаковывая его счетчики, удаляя/добавляя то что нужно, опять упаковывая и сохраняя).
2) Хранить счетчики в виде дополнительных полей в таблице с профилями пользователей. Но это тоже неоптимально и неудобно...
3) Создать под счетчики отдельную таблицу с такой структурой:
id | userid | forumid | counter
...где будут храниться счетчики пользователей. С одной стороны - ОЧЕНЬ оптимально (всего 1 простой запрос при добавлении нового сообщения и 1 запрос без каких-либо рассчетов и нагрузки при получении данных по каждому форуму). С другой - количество записей в таблице будет соответствовать такой формуле: кол-во пользователей * кол-во разделов на форуме. Т.е., допустим, 1000 пользователей и 10 разделов = 10.000 записей. По объему они конечно копеечные, но... все же отдельная таблица...
В общем, тут уже нужно решить насколько это действительно нужно...
MarKer добавил 28-01-2004 в 18:04:09:
Вообще кстати таблицу такую можно будет использовать и под другие интересные фишки - допустим, делать разные статусы (то что находится под ником) пользователям (как на той же иксе), аватары, подписи... вариантов куча 
Так что для одной такой фишки может пускать отдельную таблицу и не рационально... а вот для нескольких - может быть вполне.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|