2017-05-04 16 views
-2

前一段時間我創建了一個代理/爬蟲程序,它最終記錄了很多文件。我認爲這將是一個簡單而可靠的解決方案,但是一旦它接近1 000 000個文件,我意識到遇到了越來越多的問題。搜索數據庫可能需要長達15秒,並且我在上週遇到了兩次服務器崩潰。我測試了重新啓動apache2,在終端中搜索「test」和垃圾郵件「free -m」命令。我注意到公羊很快就升起了,可能是導致崩潰的內存。我不確定是什麼讓搜索引擎變得更快,但真的很想知道。將文件夾和子文件夾的路徑導入更快的數據庫引擎

所有文件都存儲在:

database/*/*/*.txt 

,並使用此代碼要經過他們都:

$files = array(); 
$dir = '/var/www/html/database'; 
foreach (glob($dir . '/*/*/*.txt', GLOB_NOCHECK) as $path) { 
    $title = basename($path, ".txt"); 
    if(strripos($title,$search) !== false){ 
     array_push($files, $path); 
    } 
} 

是更長的時間,但我只是想表現的如何的基礎代碼有用。

每個文件包含約6行有用信息。

所以我開始尋找一個解決方案,並認爲。如果我將搜索解析爲比Java或C更快地搜索PHP的東西?啊,這將是一團糟..所以我想到了MySQL。但我應該如何能夠將文件夾和子文件夾中的所有文件傳輸到MySQL?服務器運行Debian,帶有4 GB ram和i3處理器。

我還沒有采取任何行動,因爲MySQL很混亂,並沒有找到任何其他解決方案。我該怎麼辦?

回答

0

這個問題要求太多。這不只是一個點擊並去。我認爲更多的人有這樣的問題,但後來我意識到每個人都在使用預製的搜索引擎。

我最終將整個數據庫下載到我的Windows計算機,並在c#中編寫一個程序,它自動遍歷所有文件,獲取內容並將其發佈到我安裝在Debian服務器上的elasticsearch數據庫中。我應該已經創建了一個文件到文件轉換器而不是一個文件到純粹的POST請求。

這樣做的缺點是速度不是太高,需要2個小時才能將700 000個文件傳輸到數據庫。

由於我在文件中使用了特定的字符串,程序不會公開發布。所以這比我想象的要難得多。

C#Appllication結果: Screenshot

相關問題