用于社交网站的表的通知的数据库表结构

时间:2013-03-04 04:15:03

标签: data-structures database-design notifications

我正在开发像Facebook这样的社交网站。我很困惑如何为通知表创建结构。它应该是针对每个用户是单独的还是针对所有 - 经常添加和删除的所有记录的巨大的用户?

1 个答案:

答案 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,它可能会像这样工作:

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

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

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

我希望这对你也有帮助