2008-09-04 116 views
1

我有一個簡單的應用程序的想法,它將監視一組文件夾,索引它找到的任何文件。 gui將允許我快速標記新文件並將它們移動到單個數據庫中進行存儲,還可以通過標記,名稱,文件類型和日期提供查詢數據庫的簡單機制。目前,我在一對移動硬盤上擁有大約100多GB的文件,數據庫至少會有這麼大。如果可能,我想支持嵌入式二進制和文本文檔的全文搜索。這將是一個單用戶應用程序。BLOB存儲 - 100 + GB,MySQL,SQLite或PostgreSQL + Python

沒有試圖啓動數據庫戰爭,但是什麼開源數據庫將最適合我?我很確定SQLLite不在桌面上,但我可能是錯的。

回答

2

我仍然在爲自己的項目研究這個選項,但CouchDB可能值得一看。

0

我總是討厭回答「不要」,但是你最好用Lucene(PyLucene)之類的東西索引。幾乎總是建議將路徑存儲在數據庫中而不是文件內容。爲了補充說明,這些數據庫引擎都不會將LOB存儲在單獨的數據空間中(它們將嵌入到表的數據空間中),因此這些引擎中的任何一個都應該執行得差不多(除了sqllite以外)。您需要遷移到Informix,DB2,SQLServer或其他平臺以獲取這種二進制對象處理。

2

爲什麼將文件存儲在數據庫中?只需存儲元數據和文件名即可。如果出於某種原因需要將它們複製到新位置,請將其作爲文件系統副本來執行。

刪除文件內容後,任何有能力的數據庫都將能夠處理幾十萬個文件的元數據。

0

它們幾乎都可以工作(即使SQLLite並不打算用於併發多用戶環境中,這可能是一個問題......),因爲您不想索引實際內容的文件。

唯一的限制因素是給定數據庫的最大「數據包」大小(我指的是查詢/響應的數據包)。通常這些限制大約爲2MB,這意味着您的文件必須小於2MB。當然你可以增加此限制,但整個過程是相當低效的,因爲比如:插入一個文件,你還必須是:

  • 將整個文件讀入內存
  • 變換文件中查詢(這通常意味着十六進制編碼它的 - 因而加倍從開始時的大小)
  • 執行生成的查詢(其本身是指 - 爲對數據庫 - 它具有解析它)

我會去用一個簡單的DB和相關的文件使用命名約定存儲, kes他們很容易找到(例如基於主鍵)。當然這個設計不是「純粹的」,但它會表現得更好,而且使用起來也更容易。

-1

爲什麼你在浪費時間來模擬文件系統應該能夠處理的事情?更多的存儲+ grep是你的答案。

+0

呃,顯而易見。每個<2MB的100GB文件至少爲50,000個文件。搜索那麼多文件的文件系統目錄會比搜索元數據數據庫錶慢得多。 – djangofan 2009-07-27 19:51:42

1

我的偏好是將文檔與元數據一起存儲。一個原因是關係完整性。您不能輕鬆地移動文件或修改文件,而不需要由數據庫斡旋的操作。我確信我可以處理這些問題,但它並不像我想的那麼幹淨,我的經驗是,大多數供應商現在可以在數據庫中處理大量的二進制數據。我想我很想知道PostgreSQL或MySQL在這些領域有什麼明顯的優勢,我主要是熟悉Oracle。無論如何,感謝你的迴應,如果數據庫知道外部文件的位置,如果需要,也可以很容易地在稍後的日期提交文件。問題的另一個方面是,如果任何一個數據庫在使用Python時更容易使用。我假設這是一個洗滌。