大规模数据处理,外部API和加载条

时间:2012-04-17 20:27:07

标签: php mysql ajax api curl

我在两个网站上使用两个独立且不同的API(网站1 =>我的应用=>网站2)。从一个站点的API中提取(获取)数据并将数据发送(发布)到另一个站点。有一层同步AKA“填补裂缝”(始终保持发送站点的数据与源镜像),以及一层非重复(确保站点1的数据集在站点2上没有重复的条目)。

当用户通过简单的POST按钮引发“同步”时。可能需要将来自SITE 1的数千个条目带入SITE 2.这样做的简单低级方法是从SITE 1循环获取数据,并在该循环中我有一个函数来获取数据并将其发送到SITE 2.当大规模工作时,这种类型的循环最肯定会在页面退出时失败或挂起几分钟。

以下是“低级/低技术”方式的一个例子。其中此示例的每个部分都非常耗时。所有操作都发生在一页/一页脚本上,用户可以停止。该页面将是白色的,空白的,并且不是非常用户友好。

// Get all of the data from site one
$siteOneDataNuggets = get_siteOne_data();

//Loop through all of site one's data
foreach($siteOneDataNuggets as $siteOneDataNugget){

  //Post it to site two
  post_siteTwo_data($siteOneDataNugget);

}

当有这样的过程可能需要一段时间我想展示某种加载屏幕/栏。如何实现这样的事情。

我正在寻找一种处理上述情况的编码哲学或标准方法。想法和理论是我正在寻找的,不一定是代码示例。

我自己先入为主的替代方案。

这样做的另一种方法可能是让一个页面充当我可以请求的本地化“API”,每个页面都有自己的$siteOneDataNugget实例,将逻辑分布在1000页以上,而不是1单页。很可能是用ajax进给加载条/表示层。

进度报告

我不太喜欢替代方案。开始使用PHP CURL,当我发现加载需要几个小时(触发4分钟超时)时,我偶然发现EpiCurl中使用异步curl调用解释的blog post by Jaisen Mathai。哪个有自己的limitation我还没有征服。

1 个答案:

答案 0 :(得分:0)

我在这个问题上的时间已经超前了。我正在做的事情真是愚蠢我向我的服务器发出了数千个AJAX请求,这些请求做了一些动作。我应该做的是使用WebSockets / socket.io,这样我就可以在客户端和服务器之间进行某种双向通信,并且能够处理批量操作和进度条。

在这个问题出现时,两者都处于起步阶段。