因为vs updated_time vs created_time

时间:2014-04-24 09:33:12

标签: facebook-graph-api

我正在编写一个应用程序来收集与某个搜索字词匹配的Facebook帖子,而我正在尝试从graph.facebook.com/search端点获取新的或更新的帖子。我从调试中得出结论,这个特定的端点使用基于时间的分页(从那以后),所以这是我的过程:

  1. 使用最近的'since'时间获取新帖子(默认为现在 - 开始时为5分钟)
  2. 将我的''since'时间更新为返回帖子列表中的最新created_time或updated_time
  3. 睡眠X秒,重复
  4. 但是,我甚至看不到自己新创建的帖子。我确实得到了一些结果,但它们看起来是随机的,因为它们与我的搜索匹配,而不是我自己的搜索。出于测试目的,我使用的是使用FB开发人员工具生成的用户级访问令牌,因此我绝对不应该有任何权限问题限制我查看自己的内容。

    是什么给出了?

    编辑:更多测试显示我可以随机收到我自己的一些帖子,但似乎没有押韵或理由为什么一个帖子出现而其他帖子没有。例如,我刚发布了3个帖子,并通过我的应用程序收到了第二个帖子。第一个和第三个无处可寻。

1 个答案:

答案 0 :(得分:1)

我认为你在这里看到的是Facebook正在使用的一致性模型的人工制品。当您从两个不同的设备查看您的Feed时,您可以看到另一个示例。如果我从智能手机上查看我的信息,然后在我的电脑上查看我的信息,有时我会看到相同的项目,有时我在一台设备上看到的项目,我没有在另一台设备上看到。这是因为Facebook使用Eventual consistency

简单来说,这意味着如果给定足够的时间,所有数据集群将保持一致,但在任何给定时间点都无法保证这一点。坏消息是:你无能为力。在使用非常大的分布式系统(Facebook是世界上最大的系统之一)时,这只是一个事实。在这种规模下,现在的技术是不切实际的,以保持数据的所有副本始终完全同步。我认为你看到的是由两个群集提供的两个请求,这两个群集当前不是100%同步。

Here是关于这个主题的有趣读物。 而here来自Facebook。您可以跳到页面的Consistancy部分(虽然,我建议您阅读整篇文章。这是对Facebook架构的一个非常有趣的概述)。