2014-01-31 124 views
2

刹那间检索大量数据有我,露出这一点,非常难以解释......通过卷曲和PHP

我现在有一个项目,我们都没有通过互联网使用内部MSSQL仓库。用户需要能够从可以查询该内部仓库并接收报告的普通网站运行查询。

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

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

这有几个注意事项作品完美...

如果正在运行的查询是很大的(也可以是绝对巨大的)及其可能的服务器可能需要较长时间(超过3/4小时)运行查询(索引在内部仓库不由我处理)。尽管curl请求继续运行,但我确实发现它有时会失败。

我有2个选项供用户使用,1是等待请求完成,所以一个ajax请求然后关闭做这一切,当它完成后,他们被重定向到文件....这有时永远不会返回...所以用户将等待它永远回来 - 我试图通过每隔5秒检查一次文件系统上的文件来解决这个问题,如果发现然后下载它 - 这在一定程度上起作用。但有时它仍然会失败。

第二个选项是一旦完成允许用户离开网站并让它继续在后台执行curl请求的电子邮件报告,但是如果查询需要长时间运行,我似乎会得到清空电子邮件,就好像卷曲请求已超时。

如果查询需要很长时间或者为什么javascript有时无法报告它完成,我为什么失败了,我有点失落。任何信息指向正确的方向将是有益的 - 我不认为我很远完成这个工作。

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

感谢

凯文

+0

什么是你的RDM:mysql或sql-server? – Melon

+0

这几乎是所有的sql服务器,虽然网站上运行的MySQL,这个请求根本不接触mysql。 – Kevin

+0

你可以发布你使用的cURL代码吗? –

回答

0

好像你正在试图解决的问题OLAP与OLTP工具集。

鉴于你是CURL超时的情况和问题(对于长时间运行的报告生成,HTTP通常不是最好的选择),我的建议是在客户端提交的时候废弃异步路由的同步路由一份报告接收回一个令牌,客户每隔一段时间检查一次,看看与令牌有关的工作是否已经完成。

您甚至可以在登记时给予客户状态更新,或者将其更新,或将其与您的电子邮件主题(取决于呈现的报告的大小)并发送电子邮件。关键是不要依赖脆弱的卷曲连接,而要依赖本地进程(通过crontab或pthread库)。

+0

这就是我想要做的长期如此基础,我将在数据库中存储一个令牌,并且每当看到它完成时用户可以回来 - 但对于短期来说并不好。我可能已经解决了它反正,我认为jquery是抛出一个错误,但没有一个实际上停止ajax足够奇怪地运行,如果错误我只是让它继续似乎仍然生成报告,并按预期工作 – Kevin