0

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

我目前的表结构如下:

更新

PK Update_ID
Type
Update_Content
FK Photo_ID
FK Video_ID
FK Owner_ID
FK Group_Wall_ID
FK Friend_Wall_ID
Upvotes
Downvotes
Timestamp


注意,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 对应的值。

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

4

1 回答 1

0

我认为这个应用程序不适合 MySQL。使用 MySQL,您可以在每次读取时将所有资源集中在一起。它似乎也不需要一个提要按时间顺序跨越很远。

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

我认为使用redis会更合适。您可以为每个用户的活动提要创建一个列表。LPUSH user_id'约翰刚刚添加了一个<a href="/johnsvideo">视频</a>`

但是,此解决方案需要您拥有大量内存,并且如果用户从他们的提要中删除某些内容,也可能会出现问题。

于 2012-12-24T17:43:39.493 回答