社交网络数据库模式中的活动流/馈送/新闻

时间:2015-02-28 16:24:22

标签: sql database stream schema social-networking

我的目标是为简单\典型的社交网络实现数据库架构。 我已阅读了许多主题\答案,但有几个未解决的问题。 我们有用户表( userId,名称等)。我们可以制作一些操作回复,例如,关注等等)。我想为所有活动实现一些日志,并将其作为 PULL-MODEL 执行。因此,我们在活动表中为任何操作编写条目。此表的架构是( id,ownerId,actionType,targetId,time ),其中 ownerId 用户 ID,谁做了操作。 actionType 是回复,关注或其他操作。 targetId 是用户或帖子的ID,取决于 actionType 。当用户获取他的活动时,我们只是通过朋友ID进行查询。所以我很清楚。我的问题是:

1)如果我按照用户取消关注他,我该怎么办?我应该在活动表格中输入两个条目,还是应删除第一个 followAction 条目?什么是最佳做法?

2)很明显,我通过朋友ids查询,所以我得到了我朋友的所有活动。但是,如果我的朋友不喜欢我的照片,我必须得到一些事件"有些不是我的朋友喜欢我的照片"。那么,对于这种情况,有什么好的解决方案。可能我必须改变我当前的架构吗?

发布的问题:

How to implement the activity stream in a social network

Database Design - "Push" Model, or Fan-out-on-write

What's the best manner of implementing a social activity stream?

谢谢大家的好消息。

1 个答案:

答案 0 :(得分:3)

首先,将每种操作分成自己的表可能更好,而不是将所有操作放在一个表中,按类型区分。这使您关于每个操作的元数据更加灵活;如你所说,目标ID取决于行动;如果不将它们分成其他表格,就很难对数据应该是什么进行约束。

第二 - 关于您的问题#1,我认为您将用户操作日志用户状态混淆。你可能需要两者;您可能需要两个独立的数据结构。例如,如果用户关注然后取消关注,则状态是他们不会跟随,但操作日志是他们遵循的,然后取消关注。因此,我认为您应该小心拥有一个单独的数据结构,捕获除了操作之外的某些关系的当前状态。然后问题变得更简单,您可以记录所有操作,并相应地更新状态。

对于问题#2,照片应该是自己的数据对象,其中"喜欢"分成不同的表格;用户喜欢帖子。然后,在所有喜欢帖子的用户中,他们可以很容易地分为两类;朋友(与海报有朋友关系的人)和非朋友。