Php Facebook顶级共享URL,按用户间隔更新,mysql选择更新

Php Facebook顶级共享URL,按用户间隔更新,mysql选择更新,php,mysql,facebook,concurrency,share,Php,Mysql,Facebook,Concurrency,Share,我知道标题很复杂,但我一直在寻找一些建议,但什么也没找到 我只是想问问我的想法是否正确 我需要为我的网站项目、图片、文章等制作一个包含大约10个项目的顶级facebook共享页面 这很简单,我只需要从facebook graph api获取共享数并在数据库中更新,我不想在基于fb share的ajax调用中使用它,它可能会被误用 每个项目都有上次更新的日期时间、创建日期和数据库中的类似字段 我还需要在24小时、7天和一个月内创建顶级共享url,因此想法很简单: 用户查看一个项目,每10分钟从fb

我知道标题很复杂,但我一直在寻找一些建议,但什么也没找到

我只是想问问我的想法是否正确

我需要为我的网站项目、图片、文章等制作一个包含大约10个项目的顶级facebook共享页面

这很简单,我只需要从facebook graph api获取共享数并在数据库中更新,我不想在基于fb share的ajax调用中使用它,它可能会被误用

每个项目都有上次更新的日期时间、创建日期和数据库中的类似字段

我还需要在24小时、7天和一个月内创建顶级共享url,因此想法很简单:

用户查看一个项目,每10分钟从fb graph api获取该url的共享计数,并在数据库中更新,数据库还存储上次更新时间。 每次用户查看项目时,站点都会检查上次更新日期时间,如果超过10分钟,则会进行fb api调用和更新。每10分钟降低一次fb api调用。 这基本上是可行的,但存在一个问题——并发性

当项目被选中后,我会在php中检查上次更新是否是在10分钟前或更长时间之前,然后才调用fb api,如果大于当前数据和其余数据,则更新共享计数,因为远程调用成本高昂,并且会降低fb api的使用率

因此,在用户查看项目之前,它们都会被更新,但更新取决于select,由于时间检查和远程调用,我无法在一个SQL语句中进行更新,因此一个用户可以输入,然后再输入另一个,都是在10分钟后,然后它可能会多次调用fb api,并更新多次,用户越多,更多的电话和更新,这是不好的


有什么建议可以解决这个问题吗?我做得对吗?也许有更好的方法吗?

您可以将api检查与用户交互完全分离,并让一个单独的预定流程每10分钟收集一次facebook数据,而不管用户是谁


或者,如果您更愿意采用这种事件驱动模型,那么您需要考虑使用“互斥体”。基本上,在文件或数据库等中的某个位置设置一个标志,指示某个检查过程当前正在运行,而不是运行另一个检查过程。

Decouple不是一个选项,因为随着项目越来越多,旧项目不再被访问,因此无需更新它们,我只需要更新用户在一段时间内积极查看的项目。第二个选择很好,但我需要进一步调查。啊,好吧,我想我当时还没有完全理解你的问题。这时,您可能需要一个互斥体。