2010-09-26 12 views
2

我是一位Perl程序員,他帶有一些很好的腳本,用cURL提取HTTP頁面(來自URL的文本文件列表),並將它們保存到文件夾中。我該如何操作Perl的本地數據庫?

但是,要獲得的頁面數量在幾千萬。有時腳本在編號170,000時失敗,我必須手動再次啓動腳本。它會自動讀取URL並查看是否存在下載並跳過的頁面。但是,有幾十萬,還需要幾個小時才能跳回到停止的地方。顯然,這最終不會出現。

我被告知,而不是保存到一個文本文件,這是很難搜索和修改,我需要使用數據庫。我對數據庫瞭解不多,一年前剛剛在學校服務器上混淆了MySQL。我只需要添加數百萬行和一些靜態列的能力,快速搜索/修改一個,並且在局域網上執行此操作(如果這很困難,則可以在單臺計算機上執行)。當然,我需要使用perl訪問這個數據庫。

我應該從哪裏開始?我需要下載什麼來獲取在Windows上啓動的服務器?我應該使用哪些Perl模塊? (我正在使用ActiveState發行版)

回答

5

由於您只需要在一列上進行搜索,因此您可能希望通過使用BerkeleyDBDB_File來考慮像Berkeley DB這樣的鍵/值存儲數據庫。

通常,您可以將這些鍵/值數據庫視爲從磁盤而不是內存運行的Perl哈希。精確的關鍵查找速度非常快。其他一切都需要掃描整個數據集。

+0

原來,我需要爲每行存儲兩條以上的數據,所以我認爲這不會和SQLite一樣好,但我會在稍後收藏,謝謝! – 2010-09-27 18:02:22

+0

你知道嗎,我可能不得不使用類似這樣的東西來查找我的數據庫中是否已有唯一的URL,您會建議使用Berkeley Hash還是BTree來存儲這些值以便更快地找到它? – 2010-09-27 19:45:18

+0

散列對於快速獨特的查找和添加非常有用。 BTree保持一切排序。對於獨特的查找使用哈希。要處理多個數據列,您可以使用Storable或其他序列化程序來平滑數據,以使其位於數據列中。 MLDBM是幫助解決這個問題的工具之一。您也可以使用DBD :: DBM爲您的數據獲取DBI SQL接口。 – daotoad 2010-09-27 20:34:47

6

有很多種數據庫,但是如果您已經決定使用SQL數據庫並且試圖讓安裝過程變得簡單,那麼您可能需要查看SQLite和模塊,它們可以讓您從perl中使用它。

+0

是的,我讀過SQLite網站,聽起來像我需要的東西。如果你不介意,你可以給我一些簡單的步驟來在Windows機器上設置一個環境嗎?或者至少有一些最新的文檔介紹如何做到這一點。我下載了sqlite_amalgamation-3_7_2.zip,但現在我迷路了...... – 2010-09-26 18:37:59

+1

安裝Strawberry Perl並告訴它的CPAN客戶端安裝我提到的兩個模塊。 – rafl 2010-09-26 18:50:44

+0

哦,沒有意識到這些模塊處理的一切。謝謝,我會試試看。 – 2010-09-26 19:10:04