修改我的社交网络“更新”表的建议?

时间:2012-12-24 17:18:20

标签: mysql database foreign-keys relational-database

当我继续在我的社交网站(我可能永远不会完成)上工作时,我决定我可能应该修改我的“更新”表。如果您将此视为Facebook,则更新表会存储新闻源的故事,例如User_123更改了其状态,或者SomeOtherUser添加了新的照片/视频,或者YetAnotherUser加入了一个组。

我目前的表格结构如下:

更新

PK Update_ID
类型
Update_Content
FK Photo_ID
FK Video_ID
FK Owner_ID
FK Group_Wall_ID
FK Friend_Wall_ID
Upvotes
Downvotes
时间戳


作为一个注释,Type指的是它的更新类型(1是状态更新,2是用户加入组,3是新照片等等),Update_Content是状态文本,或类似的消息“User_123加入了一个小组”

现在我拥有它的方式,当用户将更新发布到他们自己的“墙”时,Group_Wall_ID和Friend_Wall_ID默认为0。然而,如果该用户向组发布更新,则Group_Wall_ID具有值,而Friend_Wall_ID则不具有。

此外,如果更新仅是状态更新,则默认情况下Photo_ID和Video_ID为0。但是,如果更新是新照片,Photo_ID将具有与照片表中的PK对应的值。

我觉得这个表的结构非常低效,可以使用一些修订。任何人都可以提出任何修改以使这个表更好吗?任何反馈都会很棒!谢谢,节日快乐!

1 个答案:

答案 0 :(得分:0)

我不认为这个应用程序非常适合MySQL。使用MySQL,您可以在每次读取时将所有资源集中在一起。看起来饲料还需要按时间顺序跨越很长时间。

我认为更好的解决方案是将活动推送到适当的写入源。因此,如果您发布视频,它会附加到您的所有朋友新闻Feed中。您可以将每个Feed限制为100个项目,以使列表更小。

我认为使用redis会更合适。您可以拥有每个用户的活动供稿的列表。 LPUSH user_id'John刚添加了< a href =“/ johnsvideo”>视频< / a>`

此解决方案要求您拥有大量内存,如果用户从其Feed中删除某些内容,也可能会出现问题。