Создав нечто подобное совсем недавно, я бы предложил отделить идею о том, как хранить данные от производительности. В моем случае пользователи должны иметь возможность вернуться к просмотру новостей за любой период времени, поэтому предположения arnorhs не работают (независимо от того, нет необходимости хранить HTML, если вам не нужно - оставить форматирование снаружи).
Я обнаружил, что я храню вещи в нескольких классах, ActivityType
и Activity
. ActivityType
содержит формат сообщения (например, ваше '%a commented on %o's new %r'
) и индикатор того, представляет ли оно реальное действие или комментарий к чьей-либо деятельности (поэтому я знаю, к какому объекту относится ссылка, к действию субъекта или субъекту действие прокомментировано) и Activity
хранит субъекта, жертву, первичный ключ объекта, первичный ключ к объекту с комментариями, если он существует, и отметку времени, когда он произошел.
Что здорово и приводит к хорошо нормализованным данным. Это замедляет работу, как только у вас появляется полдюжины друзей (производительность усложняется тем, что все зависит от местоположения, поэтому я просматриваю расстояние, на которое каждый пользователь находится от вас). Все ищут повод поиграть с системами хранения NoSQL, но на самом деле это хороший вариант. Вам придется де-нормализовать адские данные, чтобы получить достойную производительность из реляционной базы данных. И материал трудно кэшировать из-за различных пересечений отношений. Подумайте о том, чтобы хранить данные в MySQL, но вернуть их из системы хранения NoSQL.