3

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

每个 API 对每个请求的最大限制为 50 个结果。

聚合这些数据的最佳方法是什么,使其可靠,即有序、无重复等

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

到目前为止,我的方法是查询每个提供者的搜索 API,然后填充 MySQL 表。由此结果是有序的、分页的等。但是,我关心的是性能:API 通信、解析、插入然后在一次执行中读取所有内容。

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

任何帮助将不胜感激。

4

2 回答 2

1

我有一个网站,它有超过 100 个 rss/atom 提要,这就是我所做的:

  1. 我有一个提要列表和一个迭代它们的 cron 作业,大约每分钟 5 个提要,这意味着我每 20 分钟左右循环一次所有提要。
  2. 我解除提要,并尝试将每个条目插入数据库,使用 url 作为唯一字段,如果 url 存在,我不插入。输入日期是我当前的系统时钟,由我的应用程序插入,因为 rss 中的日期字段不可信,在某些情况下甚至无法解析。
  3. 对于某些提要,只有经验可以告诉您,我也搜索重复的标题,有些网站出于自己的原因更改了网址。
  4. 这些项目现在都放在同一个数据库表中,可以查询了。

最后一个想法:如果您的应用程序可能在生产中添加了新的提要,您真的应该检查提要是否是“新的”(即:数据库中没有以前的条目),如果是,您应该标记所有当前可用的链接处于非活动状态,否则,当您添加提要时,该提要中将出现大量文章,所有文章都具有相同的日期和时间。(简单地说:我描述的方法仅用于将来添加到提要中,过去的文章将不可用)。

希望这可以帮助。

于 2010-02-13T12:27:32.180 回答
1

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

搜索诸如https://stackoverflow.com/search?q=%5Bphp%5D+background+processing之类的问题

每个尝试这样做的人都意识到调用其他站点获取数据很慢。前一个或两个看起来很快,但其他站点中断(并且您的应用程序中断)并且其他站点很慢(并且您的应用程序很慢)

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

选择 1 - 使用简单地获取和加载数据库的后台进程预查询数据。

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

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

于 2010-02-13T11:50:31.803 回答