实时活动流程

时间:2012-01-21 16:24:43

标签: php mysql database-design

我正在维护旧的基于PHP的CMS,其中包含论坛软件,文章发布系统等等 - 所有自定义。现在,所有者希望实现一个全局的伪实时(它可能只是每十秒或更新一次更新一次)活动流程,类似于Facebook上的那个:

enter image description here

现在,我正在尝试以最佳和最简单的方式实现这一点,以便可以轻松扩展到包含不同类型的活动(创建博客帖子,评论相册/博客帖子,创建或回复论坛主题,发表文章等。)

前端位不应该太难,我不确定的是我应该如何设置事件表以适应将要包含的所有不同类型的事件。所有活动都会包含用户ID,网址,日期时间和“活动类型”等内容,但根据用户是创建相册还是有人回复论坛,我必须保存非常不同的数据线。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

根据每个用户的视图是否唯一,您可以采取一些方法 - 例如:他们可以将某些事情标记为对他们不感兴趣,或者您是否要隐藏他们已经拥有的项目读。 (我在这个答案中假设所有用户都看到相同的Feed。)

由于以下原因,我不会使用单独的事件表来存储“操作”:

  • 该信息仅在短时间内有效(只要项目从列表顶部消失),因此您希望清除旧值,从根本上创建重量级FIFO缓冲区
  • 您将在系统中存储现有数据的副本(即,当新闻报道的记录已经创建时间时,创建新闻故事X的记录)
  • 如果操作被撤消(或项目已删除),您还需要删除事件表中的相关条目
  • 不同类型的事件将具有不同的信息和元数据,使得很难将它们全部规范化为单个表架构

你可以:

  • 每隔5分钟左右运行一个预定脚本,检查是否有任何新活动(即查找不到X分钟的新帖子),并写入一个静态HTML文件,其中包含可嵌入所有页面的活动源内容应该是可见的
  • 将您的活动写入内存存储(即内存缓存),并在它们发生时刷新您的最大行动年龄的条目
  • 创建一个动态,可以动态获取最新的动作数据但位于代理服务器后面,该服务器会将其缓存一段时间......(这种方法对每个用户的Feed也很有效)

更新:原始海报已确认所有用户都看到相同的Feed内容。基于此,我建议simpest解决方案是安排一个脚本,该脚本生成一个源的静态HTML文件,可以直接嵌入到页面中(因为它不需要安装和配置内存存储或代理服务器)。