2011-04-27 40 views
2

我想知道是否將pdf存儲在數據庫表中是一個很好的長期構想。這裏是問題的描述:要使用Blob或不使用(mysql + coldfusion)

我有一個客戶,有數百個客戶端上傳許多PDF文件作爲證明。這些pdf文件的範圍從相當小(< 100K)到10MB。這些文件可能會多次上載,因爲它們是單個項目的證明(即proof1.pdf,proof2.pdf等)。每個客戶的PDF必須保持獨立,每個項目的PDF必須保持獨立。

目前設置的位置是將文件直接上傳到爲每個項目的每個客戶端創建的文件夾。這是好的,但佔用空間,查找文件可能有點噩夢。就像我說過的,每個項目和每個客戶都會上傳多個證明。

我能想到的最佳解決方案是提供一個界面,將PDF文件直接上傳到一個數據庫表中,該數據庫跟蹤客戶ID,項目ID和證據。這提供了更好的安全性,並提供了從項目X的每個客戶獲取所有PDF文件的能力。

將開發數據庫清理工具來刪除超過指定時間段的記錄,所以表將不會一直持續增長,但我擔心性能受到影響(如果有的話)以及其他我可能忽略的負面因素。

所以,總體來說這是一個好主意,或者我應該找出一個更好的方法來處理這個文件系統?

回答

7

我會建議存儲指向數據文件系統,以代替存儲在BLOB字段的實際文件的數據的輕量鍵。一種可能的安排是散列你的文件(用SHA-1)並將該散列用作磁盤上的文件名 - 甚至可能將存儲安排到映射第一個散列字符(,即80cdef...可能存儲在storage/8/0/c/d/80cdef...)。

然後,您的表可能包含主鍵,該文件的人性化顯示名稱以及包含磁盤上物理文件名稱(哈希)的字段。

這也使您可以靈活地將文件存儲與數據庫存儲區分隔成分佈式文件系統;這將是一個相當合理的分離,在一個長期體系中將不可避免地增長得非常大。通過這種方式,您可以保留相對較小的數據庫(可能具有更好的性能和更少的備份痛苦)的優勢,同時將更大難度的大容量存儲卸載到數據庫本身之外的系統,並且已經存在過多成熟的方法。

+0

CDN空間便宜。我會使用由Rackspace的CDN支持的chomp解決方案。 – 2011-04-28 01:38:15

+0

+1:您的建議是使用db來跟蹤文件在數據庫中的存儲位置,這是我的第一個想法,並且仍然可能是要走的路。謝謝(你的)信息。 – wblakenc 2011-04-28 13:28:27

0

我傾向於迴避在數據庫中存儲文件。我已經在校園中使用Blackboard安裝,您可以在該應用程序中上傳文件。結果,數據庫增長到超過1TB的難以管理的大小。 Blackboard的備份系統將每門課程打包爲一個zip文件,並對課程進行完整備份,所有文件都必須進行壓縮和壓縮......這成爲一個漫長的過程。我們必須定期分割(並重新分割)備份。

這裏是另一篇文章,在這個評論: Stackoverflow post

+0

另一個SO帖子讓我開始疑惑,因爲它對於潛在的陷阱並不是100%清楚。該計劃將保留文件(記錄)一段特定時間,然後清除數據庫。備份不應變得難以管理。謝謝(你的)信息。 – wblakenc 2011-04-28 13:30:20