2011-02-25 39 views
2

有人可以解释从数据模型的角度来看,流是从用户跟踪点到实时馈送的流程?我的开发团队遇到以下问题:从用户跟踪到活动馈送的基本数据流

当用户执行活动时,脚印会记录到user_activity表中,该表是所有用户脚印的主表。这意味着每个需要被跟踪的用户的每一个动作都会写在这里。

问题:
1)活动是1:M。就像我可以在1张照片中标记10个人一样。所以很显然,我不会在活动表中写下10个foorprints。因此,我是否需要另一个表来存储活动细节?

2)由于此表将所有对象的所有活动都记录到活动源表中并将其输出到活动源中,因此该源需要知道活动中涉及的所有对象,因此它可以说'X'标记马克,约翰,萨拉在蒂姆的照片。“ Mark,John,Sarah基本上都是链接到他们的个人资料的用户对象。照片是链接到照片表的照片对象...

以上是一个示例,但有许多对象,如电影,音乐,品牌,城市等等。因此,系统需要从日志表中知道到活动馈送哪个对象是什么以及它在哪里它可以将相关数据提取到馈送中。要做到这一点,我有2个colomms:object_id和object_type_id其中object_type就像“用户,照片,品牌等),object_id是对象的ID,但如何将其与实际表连接?

3)最后,是这种设计是最好的方式去我如何从追踪数据到饲料,即登录到日志表。日志表可能有一个细节表和日志表连接会话表。每2分钟一个玉米作业预计这些数据拉入其非规范化,并从这些提取数据+直接读取对象表到活饲料的活动饲料表。

  • 的2分钟玉米的工作也让我害怕,因为如果有很多的记录,那么系统可能需要超过2个分钟完成这项工作,然后会有积压。那么我可以使用其他方法吗?

回答

1
  1. 登录各10个动作,但增加了一个activitybatchid这是共同的所有操作,让你可以跟踪哪些行为发生一起。

  2. 我还会将activitybatchid写入队列表中进行处理,这是cron作业读取的将项目添加到Feed表格的内容。在处理activitybatchid之后,它将被删除。

  3. 我建议在这种情况下使用递归cron作业,它一次读取一行或一批行,然后在维护锁的同时进行处理,以便其他进程不能读取此表。您可以柚木一次处理的行数,以提高性能。同样在这个过程死亡的情况下,锁定会在一定的空闲时间后被释放。

  4. activitybatchid的处理将读取活动表中的相关数据以构建必要的提要细节,并且由于此操作只进行一次,因此应用程序无需记住。

所以基本上你最终用:原始数据,队列表活动表与活动转换为进料,其包含用于显示或呈现

所生成的进料的进料表