php - Facebook 热门共享网址,由用户使用间隔和 mysql 选择更新进行更新

标签 php mysql facebook concurrency share

我知道标题很复杂,但我一直在寻找一些建议,但一无所获。

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

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

这很简单,我只是从 facebook graph api 获取分享计数并在数据库中更新,我不想在基于 fb 分享的一些 ajax 调用中实现它,它可能会被滥用。

每个项目都有上次更新的日期时间,创建日期和数据库中的喜欢字段。

我还需要在 24 小时、7 天和一个月内制作顶级共享 url,所以这个想法很简单:

  1. 用户查看一个项目,每 10 分钟从 fb graph api 获取此 url 的共享计数并在数据库中更新,数据库还存储最后更新时间。
  2. 每次用户查看项目时,网站都会检查上次更新日期时间,如果超过 10 分钟,它会调用 fb api 并进行更新。每 10 分钟降低一次 fb api 调用。

这基本上是可行的,但是有一个问题——并发性。

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

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

任何建议如何解决这个问题?我做得对吗?也许有更好的方法?

最佳答案

您可以将 api 检查与用户交互完全分离,并让一个单独的计划进程每 10 分钟收集一次 facebook 数据,无论用户如何

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

关于php - Facebook 热门共享网址,由用户使用间隔和 mysql 选择更新进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15328727/

相关文章:

php - 如何在 laravel Controller 构造函数中获取登录用户

php - 不允许的 URL : Facebook PHP login

Mysql导出表order by

android - 使用Keytool的问题

flutter - Facebook 登录 flutter 不工作哈希键

php - 错误 : Entities passed to the choice field must be managed

php - 使用php将所有数组值输出到文件

mysql - 获取时间戳日期距今天 n 天的 sql 结果

mysql - PL/SQL 错误 ORA-01403 : No data found. 未收到预期结果

facebook - Inappbrowser回调