有人可以从数据模型的角度解释流程是如何从用户跟踪点到实时Feed的吗?我的开发团队遇到了这个问题:
当用户执行活动时,将足迹记录到user_activity表,该表是所有用户足迹的主表。这意味着每个需要跟踪的用户的每个操作都将写在这里。
问题:
1)活动为1:M。就像我可以在一张照片中标记10个人一样。所以显然我不会在活动表中为此写10个foorprints。因此,我是否需要另一个表来存储活动详细信息?
2)由于此表记录了所有对象的所有活动,从它被送入活动供稿表以输出到活动供稿,因此供稿需要知道活动中涉及的所有对象,因此它可以说“X在Tim的照片中标记了Mark,John,Sarah。”其中Mark,John,Sarah基本上是链接到他们的个人资料的用户对象。照片是链接到照片桌的照片对象......
以上是一个例子,但有许多对象,如电影,音乐,品牌,城市等。所以,系统需要知道从日志表到活动源,哪个对象是什么,在哪里是这样的它可以将相关数据输入到Feed中。为此,我有2个colunms:object_id和object_type_id,其中object_type类似于“User,Photo,Brands等”,object_id是对象的ID。但是如何将它与实际表连接?
3)最后,这个设计是如何让它从跟踪数据转到源的最佳方式,即记录到日志表。日志表可能有详细信息表,日志表与会话表连接。每2分钟,一个玉米作业被安排将这些数据拉入一个非规范化的活动供稿表,并从这些+对象表中提取数据,以便直接读入实时供稿。
答案 0 :(得分:1)
记录10个操作中的每个操作,但添加一个对所有操作都通用的activitybatchid,以便您可以跟踪一起发生的操作。
我还会将activitybatchid编写到队列表中进行处理,这是cron作业在将项添加到feed表时读取的内容。在处理activitybatchid后,它将被删除。
我建议在这种情况下使用递归cron作业,一次读取一行或一批行,然后进行处理,同时保持锁定,以便其他进程无法读取此表。为了提高性能,您可以柚木化一次处理的行数。此过程如果此过程终止,锁定将在一定的空闲时间后释放。
activitybatchid的处理将从活动表中读取相关数据以构建必要的Feed详细信息,并且由于这样做了一次,因此应用程序无需记住。
所以基本上你最终会得到:带有原始数据的活动表,带有要转换为供稿的活动的队列表,一个包含生成的供显示或呈现的供稿的供稿表