如何聚合API数据?

时间:2010-02-13 10:56:01

标签: php api cakephp aggregation

我有一个连接到2个流行API的系统。我需要将每个数据聚合成一个统一的结果,然后进行分页。该项目的范围意味着该系统最终可能支持10个API。

每个API对每个请求施加最多50个结果限制。

汇总这些数据的最佳方法是什么,以便它是可靠的,即有序的,没有重复的等等

我在LAMP环境中使用CakePHP框架,但是,我认为这个问题与所有编程语言有关。

到目前为止,我的方法是查询每个提供程序的搜索API,然后填充MySQL表。从这里结果是排序,分页等。但是,我关心的是性能:API通信,解析,插入然后一次执行读取。

我错过了什么,有没有人有任何其他想法?我确信这是许多替代解决方案的常见问题。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

是的,这是一个常见的问题。

搜索SO以查找https://stackoverflow.com/search?q=%5Bphp%5D+background+processing

等问题

每个试图这样做的人都意识到调用其他网站的数据很慢。前一个或两个似乎很快,但其他网站中断(你的应用程序中断)和其他网站很慢(你的应用程序很慢)

您必须断开前端与后端的连接。

选择1 - 使用后台进程预先查询数据,只需获取并加载数据库。

选择2 - 启动一个长时间运行的后台进程,并从JavaScript函数中检查它是否已完成。

选择3 - 用户的初始请求产生后台进程 - 然后您通过电子邮件向他们发送链接,以便他们可以在作业完成时返回。

答案 1 :(得分:1)

我有一个网站正在使用超过100个rss / atom feed,这就是我所做的:

  1. 我有一个Feed列表和一个迭代它们的cron作业,每分钟约5个Feed,这意味着我每20分钟左右循环一次所有Feed。
  2. 我抬起Feed,并尝试将每个条目插入数据库,使用url作为唯一字段,如果url存在,我不插入。输入日期是我当前的系统时钟,由我的应用程序插入,因为rss中的日期字段不可信,在某些情况下,甚至无法解析。
  3. 对于某些Feed,只有经验可以告诉你哪些,我也搜索重复的标题,有些网站会因为自己的原因更改网址。
  4. 这些项目现在都放在同一个数据库表中,随时可以查询。
  5. 最后一个想法:如果您的应用程序可能在生产中添加了新的Feed,那么您还应该检查Feed是否为“new”(即:db中没有先前的条目),如果是,则是应将所有当前可用的链接标记为非活动状态,否则,当您添加Feed时,该Feed中会有一个文章块,所有文章都具有相同的日期和时间。 (简单地说:我描述的方法仅用于将来添加到Feed中,过去的文章将无法使用)。

    希望这会有所帮助。