活动日志可能包含大量记录,因为它通常包含当前用户的活动和他们所有的朋友。如果您要加入各种表格,并且用户有 100 多个朋友,则可能会提取大量数据。
一种方法是将数据非规范化并将其视为一个大日志,其中应该出现在用户活动日志页面上的所有条目都存储在针对该用户的活动日志表中。例如,如果用户 A 有两个朋友,用户 B 和用户 C,当用户 A 执行某项操作时,会创建三个活动日志记录:
record 1: "I did this" log for user A
record 2: "My friend did this" log for user B
record 3: "My friend did this" log for user C
你会得到重复的,但这并不重要。选择速度很快,因为它来自一个表并且仅根据用户 ID 编制索引。并且您很可能会维护一个活动日志表(即删除超过 1 个月的条目)。
活动日志表可能类似于:
-id
-user_id (user who's activity log this is)
-action_user_id (user who took the action, or null if same as user_id)
-activity_type
-date
为单个用户选择所有最近的活动日志很容易:
SELECT * from activity_log WHERE user_id = ? ORDER by date DESC LIMIT 0,50
为了使这种方法真正有效,您需要在单个活动日志表中拥有足够的信息,而不需要任何进一步的选择。例如,您可以存储原始日志消息,而不是动态构建它。