我正在开发像Facebook这样的社交网站。我很困惑如何为通知表创建结构。它应该是针对每个用户是单独的还是针对所有 - 经常添加和删除的所有记录的巨大的用户?
答案 0 :(得分:2)
我遇到了和你一样的问题,在研究表格结构的位置时发现了这个(found this):
id
user_id (int)
activity_type (tinyint)
source_id (int)
parent_id (int)
parent_type (tinyint)
time (datetime but a smaller type like int would be better)
其中:
activity_type 告诉我活动的类型, source_id 告诉我活动与之相关的记录。因此,如果活动类型表示“添加收藏”,那么我知道 source_id 是指收藏记录的ID。
parent_id / parent_type 对我的应用非常有用 - 它们会告诉我与该活动相关的内容。如果书籍被收藏,那么parent_id / parent_type会告诉我该活动与具有给定主键(id)的书籍(类型)相关
我在(user_id,time)上编入索引,并查询user_id IN(...朋友...)和时间>的活动一些截止点。抛弃id并选择不同的聚簇索引可能是一个好主意 - 我没有尝试过。
非常基本的东西,但它很有效,很简单,随着需求的变化,它很容易使用。此外,如果您不使用MySQL,您可以在索引方面做得更好。
它还建议使用Redis来更快地访问最近的活动。 使用Redis,它可能会像这样工作:
Redis速度很快,并提供了一种在一个连接上管道命令的方法 - 因此将活动推送到1000个朋友需要几毫秒。
有关我所谈论的内容的更详细解释,请参阅Redis的Twitter示例:http://code.google.com/p/redis/wiki/TwitterAlikeExample
我希望这对你也有帮助