Оптимальный способ реализовать флаги чтения сообщений на форумах? - PullRequest
6 голосов
/ 02 марта 2011

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

Первое, что приходит на ум, - это чистый способ создания таблицы со столбцами post_id и user_id, в которой каждая строка будет представлять прочитанное пользователем сообщение. Но это приводит к большому количеству вставляемых данных и снижению производительности базы данных. И даже больше данных, вставленных после нажатия на «пометить все как прочитанное». Если бы все пользователи прочитали все сообщения, это означало бы (количество пользователей) * (количество сообщений) строк в базе данных.

Этот метод может быть оптимизирован для хранения меток времени для каждого потока и каждого пользователя и обновления этих меток времени каждый раз, когда пользователь читает новые сообщения. Но это все еще много данных. Это будет означать (количество пользователей) * (количество потоков) строк.

Я могу упростить это для хранения отметки времени "последнего посещения" на уровне форума (т.е. категории тем). Это будет означать (количество пользователей) * (количество форумов), что не так уж и плохо, но возникает вопрос, когда мне следует обновить эту временную метку, так что это не слишком запутывает пользователей.

Спасибо за любые идеи.

1 Ответ

3 голосов
/ 02 марта 2011

Я полагаю, что "каждая тема имеет n сообщений", как вы используете эти термины.

Я думаю, что лучше всего хранить каждый из них (user_id, read thread_id, timestamp). Я понимаю, вы понимаете, что это не (количество пользователей) * (количество потоков) строк, это (количество пользователей) * ( чтение количество потоков) строк.

Если пользователь помечает все как прочитанное, вставьте специальное значение как thread_id, например 0.

Как указал Дагон, хороший форум с открытым исходным кодом уже решил бы все проблемы.

...