我正在开发像 Facebook 这样的社交网站。我很困惑如何为通知表创建结构。它应该为每个用户分开还是一个巨大的用于频繁添加和删除的所有记录?
1 回答
我和你有同样的问题,在研究给出的表结构在哪里时发现了这个(找到了这个) :
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
我希望这也可以帮助你