2013-08-29 17 views
0

我有一個函數,下載PHP鏈接列表(可以說大約100 000,但不是一次)。只有在沒有下載的情況下,纔想從這些鏈接下載數據,所以我需要檢查哪些不在MySQL數據庫中。數據庫現在包含大約40 000條記錄。什麼是正確的方法來做到這一點?我無法將所有這些鏈接保留在數組中,並與MySQL結果進行比較,因爲它佔用的內存太多。我正在從多線程鏈接(通過叉)下載信息。如果父母需要10MB的內存,30個分支需要300MB等。我試圖單獨查詢每個鏈接的數據庫,但在很短的時間後,我從MySQL服務器斷開連接,當我嘗試再次連接時(我ping連接到檢查它是否仍然存在)並嘗試選擇它關閉連接的數據庫,錯誤爲「MySQL服務器已經消失」。我應該怎麼做?一個正確的方法來檢查陣列中的哪些元素不在表

回答

0

您可以在文本文件中「保存」鏈接僅用於此檢查,如果鏈接已下載,則可以更快地使用此鏈接進行比較。

看一看這個mytxt

0

這是不完全的回答你的問題,但它可能是值得的,同時考慮節約找到的結果都但它們存儲在關聯數組以鏈接爲關鍵。這種方式重複將簡單地重寫以前的版本。

這種方法的優點是你不會在檢查時「浪費」任何時間,但缺點可能是,尤其是如果你處理很多列時,你需要太多時間下載冗餘信息。

+0

url是唯一的密鑰,是的,它不會幫助我,因爲從一個鏈接下載和提取信息大約需要5秒鐘,在這5秒內我可以檢查像MySQL中的10 000 000條記錄 –

+0

好吧, case只需獲取URL,然後檢查你的關聯數組是否有'array_key_exists($ url,$ arr)',然後只在結果爲'false'時才下載其餘的信息。 – cars10m

+0

我得到了更好的主意,測試它...通過選擇'where'in()'子句從數據庫中選擇urls來檢查記錄塊,然後對這兩個結果執行'array_diff()'。似乎工作正常。 –

相關問題