如何在基于PHP的社区应用程序中阻止Facebook NewsFeed功能?例如“X用户上传了新照片,Z参加了活动”。从不同的表中获取所有这些数据会消耗太多资源。
感谢。
答案 0 :(得分:7)
有几种不同的方法可以做到这一点,但我建议的是这个。保留一个“历史”表,其中包含每个用户的所有记录,时间戳以及操作的描述以及用于执行何种操作的标志(或预定义键)。这将允许您有选择地查询单个表以查找某些类型的操作,并在设置的时间范围内进行显示。但是,对于很多用户而言,此表会快速增长,因此您可以考虑清除以后不会再次使用的旧数据。密切关注索引以保持查询的快速性,并考虑使用查询缓存,因为您可能经常生成相同的结果。
只要您不打算使用此历史数据来审核用户操作,就可以在一段时间后将其转储。如果您确实需要审计跟踪,那么您可能需要考虑创建一个temp_history表来显示最近的操作,然后在CRON中将他们最近的操作移动到永久审计表中以进行长期存储。
答案 1 :(得分:3)
首先定义您在网站上调用的活动。活动可以包含多个超链接。所以一个php多维数组可能在这里有所帮助,它可以作为序列化对象进入表中。
假设x现在与y,z,a和b连接。您可以将y,z,a和b定义为配置文件链接。 假设x评论了新照片。在这种情况下,y成为该人的个人资料照片的新超链接。 说x成为zoozoo组的粉丝。在这种情况下,zoozoo成为粉丝页面的超链接。
创建一个活动表,将其缩放为大使其成为activity_USER_ID,每次用户注册创建此表并检查您是否不必再次创建它。
定义活动,如1,2,3或您认为人们可能对您支持的社区感兴趣的最佳活动。
表结构应该很简单:activity php array,timestamp。如果你使用jQuery和Ajax来填充像在facebook中使用鼠标滚动完成的活动,那么你总是可以将php数组转换为json并在客户端进行格式化。
每当用户登录时执行此操作。
如果用户群比较大,那么您可能想要放入一些将事件放在event_MM_DD_YYYY中的作业处理系统,然后您可以对这些事件进行批处理以将其存储在活动表中。
最近不要展示超过10 20 30项活动。
希望这对你有帮助:)
答案 2 :(得分:1)
我认为您已回答了自己的问题:从单个表中提取数据。
一种简单的方法是,所有其他组件都可以与中央“事件记录器”通信,该事件记录器记录用户新闻源的内容。
答案 3 :(得分:1)
我喜欢Paul的解决方案(很容易使用像Symfony这样的某些框架)。 如果您希望在速度方面更进一步,您还可以使用每用户缓存系统,该系统将在第一次请求时查询数据并构建新的源。然后检索以下请求的缓存数据。 事件记录器将在trigerred时清除相关用户的缓存。
在facebook的情况下,我认为他们使用'推送'ajax实现来通知客户端有新闻要显示。
Xcache,Apc或基于文件系统的缓存系统可以帮助您构建这样的系统。