1

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

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

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

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

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

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

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

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

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

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

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

4

1 回答 1

0

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

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

于 2013-03-11T06:40:05.320 回答