2014-01-31 122 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