【问题标题】:Database table structure for notifications like table for a social networking site通知的数据库表结构,如社交网站的表
【发布时间】:2017-08-22 04:59:04
【问题描述】:

我正在开发像 Facebook 这样的社交网站。我很困惑如何为通知表创建结构。应该为每个用户分开,还是为频繁添加和删除的所有位置记录一个巨大的?

【问题讨论】:

  • 到目前为止,我已经创建了帖子、个人资料和照片等表格。但我对通知感到困惑。看到我认为它有两种方式 - 1. 每个用户的小通知表和一个将所有通知存储在一起的大表。例如。 Not_a11 (id, notf_id) 。通知_master(notf_id,memid,notif_text,dttime)。这样我将一直更新两个表。每当用户登录他的表时,都会引用并显示通知。你说什么
  • 有人回复吗?

标签: data-structures database-design notifications


【解决方案1】:

我和你有同样的问题,在研究给出的表结构在哪里时发现了这个(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 (...friends...) AND time > some-cutoff-point .放弃 id 并选择不同的聚集索引可能是个好主意 - 我还没有尝试过。

相当基本的东西,但它很有效,很简单,并且随着您的需求变化很容易使用。此外,如果您不使用 MySQL,您可能会在索引方面做得更好。

它还建议在那里使用Redis 以更快地访问最新活动。 混合使用 Redis,它可能会像这样工作:

  • 创建您的 MySQL 活动记录
  • 对于创建活动的用户的每个朋友,将 ID 推送到他们在 Redis 中的活动列表中。
  • 将每个列表修剪到最后 X 项

Redis 速度很快,并提供了一种跨一个连接传递命令的方法 - 因此将活动推送给 1000 个朋友需要几毫秒。

有关我所说的更详细的解释,请参阅 Redis 的 Twitter 示例:http://code.google.com/p/redis/wiki/TwitterAlikeExample

希望对你也有帮助

【讨论】:

  • 只提供链接参考作为答案并不好。如果链接被更改/更新/编辑/删除,答案将自动失效。因此,请始终尝试解释答案,然后提供参考。
猜你喜欢
  • 2014-01-31
  • 1970-01-01
  • 2014-07-27
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 2019-10-06
相关资源
最近更新 更多