【问题标题】:Suggestions for revisions to my social network "Updates" table?对我的社交网络“更新”表的修改建议?
【发布时间】:2012-12-25 01:43:39
【问题描述】:

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

我目前的表结构如下:

更新

PK Update_ID
类型
更新_内容
FK Photo_ID
FK Video_ID
FK Owner_ID
FK Group_Wall_ID
FK Friend_Wall_ID
点赞
否决票
时间戳


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

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

【问题讨论】:

  • 是否需要为此使用关系数据库?
  • @TRENT 这不是必需的,但到目前为止我一直在使用。

标签: mysql database foreign-keys relational-database


【解决方案1】:

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

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

我认为使用 redis 会更合适。您可以为每个用户的活动提要创建一个列表。 LPUSH user_id 'John 刚刚添加了一个视频`

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

【讨论】:

  • 你提议去规范化。通常的警告适用于此。
猜你喜欢
  • 2020-01-29
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多