2

有人可以从数据模型的角度解释从用户跟踪到实时提要的流程吗?我的开发团队遇到了这个问题:

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

问题:
1) 一个活动是 1:M。就像我可以在 1 张照片中标记 10 个人。所以显然我不会为此在活动表中写 10 个足迹。因此,我需要另一个表来存储活动详细信息吗?

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

上面是一个例子,但是有很多很多对象,比如电影、音乐、品牌、城市等。所以系统需要如何从日志表到活动提要知道哪个对象是什么以及它在哪里,以便它可以拉将相关数据放入提要中。为此,我有 2 个列:object_id 和 object_type_id,其中 object_type 类似于“用户、照片、品牌等”,object_id 是对象的 ID。但是如何将其与实际表连接?

3)最后,这种设计是最好的方式来了解我如何让它从跟踪数据到提要,即记录到日志表。日志表可能有一个明细表和日志表与会话表连接。每 2 分钟安排一次玉米作业将这些数据拉入一个非规范化的活动提要表中,并从这些 + 对象表中提取数据以直接读取到实时提要中。

  • 2 分钟的玉米作业也让我感到害怕,因为如果有很多记录,那么系统可能需要超过 2 分钟才能完成作业,然后就会出现积压。那么我可以使用其他任何方法吗?
4

1 回答 1

1
  1. 记录 10 个动作中的每一个,但添加一个所有动作共有的 activitybatchid,以便您可以跟踪哪些动作一起发生。

  2. 我还将 activitybatchid 写入队列表以进行处理,这是 cron 作业将读取的内容以将项目添加到提要表。处理完activitybatchid 后,它将被删除。

  3. 我建议在这种情况下使用递归 cron 作业,它一次读取一行或一批行,然后在保持锁定的同时进行处理,以便没有其他进程可以读取此表。您可以一次处理一次处理的行数,以提高性能。此外,如果这个进程死亡,锁将在一定的空闲时间后被释放。

  4. ActivityBatchid 的处理将从活动表中读取相关数据以构建必要的提要详细信息,并且由于这是一次完成,因此应用程序不需要记住。

所以基本上你最终会得到:包含原始数据的活动表,包含要转换为提要的活动的队列表,包含生成的提要以供显示或渲染的提要表

于 2012-03-01T18:51:58.400 回答