通过curl和php检索大量数据

Posted

技术标签:

【中文标题】通过curl和php检索大量数据【英文标题】:Retrieving a large amount of data through curl and php 【发布时间】:2014-02-24 04:42:27 【问题描述】:

我有一个项目,我们有一个在 Internet 上不可用的内部 mssql 仓库。用户需要能够从可以查询此内部仓库并接收报告的普通网站运行查询。

为此,我在内部服务器(可通过 Internet 获得)上创建了一个脚本,该脚本在 mssql 服务器(通过 Intranet)上运行查询并返回一串数据(使用 php://output)

为了让它在网站端正常工作,我在远程服务器上创建了一个 php 文件,它向内部服务器发出 curl 请求(带有我传入的变量),当 curl 请求完成时它通过将变量返回到将内容写入文件的网站,然后我将用户重定向到该文件。

这很完美,但有一些注意事项...

如果正在运行的查询很大(它们可能非常庞大),则服务器可能需要很长时间(超过 3/4 小时)来运行查询(内部仓库的索引不是由我处理的)。虽然 curl 请求继续运行,但我确实发现有时它会失败。

我有 2 个选项供用户使用,1 是等待请求完成,所以一个 ajax 请求然后开始执行所有这些操作,完成后它们被重定向到文件....这有时永远不会返回......所以用户等待它永远回来 - 我试图通过每 5 秒检查文件系统上的文件来解决这个问题,如果找到然后下载它 - 这在一定程度上有效.. . 但有时它仍然会失败。

第二个选项是在完成后通过电子邮件发送报告,允许用户离开网站并让它继续在后台执行 curl 请求,但是如果查询需要很长时间才能运行,我似乎是空的就像 curl 请求超时一样发送电子邮件。

如果查询需要很长时间,或者为什么 javascript 有时无法报告它已完成,我有点不知所措。任何可以为我指明正确方向的信息都会很有用 - 我认为我离完美地工作还很遥远。

仓库拥有超过 1 亿条记录。

【问题讨论】:

你的 RDM 是什么:mysql 还是 sql-server? 这几乎都是 sql-server 虽然网站运行在 mysql 上,但这个请求根本不涉及 mysql。 你能发布你正在使用的 cURL 代码吗? 手头上没有代码,它是标准的curl代码,超时设置为无限。我现在发现虽然 curl 没有失败,但它确实总是创建好的报告,它更多的是用户界面端,有时只是挂起,在我遇到 jquery 失败之前,它会简单地结束请求,这是一个坏主意,因为它仍在生成报告,虽然 jquery 抛出错误,但如果我忽略错误并让它继续它确实完成。 【参考方案1】:

您似乎正在尝试使用 OLTP 工具集解决 OLAP 问题。

鉴于您遇到 CURL 超时的情况和问题(HTTP 通常不是像这样长时间运行的报告生成的最佳选择),我的建议是取消同步路由以使用客户端提交的异步路由报告,收到一个令牌,客户端每隔一段时间检查一次,看看与令牌相关的工作是否已经完成。

您甚至可以在客户签到但尚未完成时向他们提供状态更新,或者将其与您的电子邮件创意联系起来(取决于呈现的报告的大小)并发送一封电子邮件。关键是不要依赖脆弱的 curl 连接,而是依赖本地进程(通过 crontab 或 pthread 库)。

【讨论】:

这是我长期想做的事情,所以基本上我会在数据库中存储一个令牌,用户可以随时回来查看它完成 - 但短期内没有好处。无论如何我可能已经解决了它,我认为 jquery 抛出了一个错误,但并没有真正停止 ajax 奇怪地运行,如果出现错误我只是让它继续它似乎仍然会生成报告并按预期工作

以上是关于通过curl和php检索大量数据的主要内容,如果未能解决你的问题,请参考以下文章

Paypal 使用 PHP cURL 获取交易详情

从 REST API GitHub 检索大量数据

如何存储大量图像以使用 html 检索 [关闭]

使用 PHP 和 cURL 操作从另一个站点检索到的图像数据是不是违反了同源策略?

如何通过php的curl模拟ajax请求,获取其返回值

PHP、MySQL 和大量简单查询