數據庫系統中文件附件保存的最佳辦法
數據庫系統中文件附件保存的最佳辦法
作者: http://blog.csdn.net/jacklondon
http://blog.csdn.net/jacklondon/archive/2010/10/26/5966558.aspx
開發數據庫系統的人很多,我相信也有很多人碰到過要將文件保存在數據庫中的問題。常見的數據庫系統,都有 blob/image/binary 之類的字段類型,用于處理這個問題。
軟件開發人員,都會碰到這個問題,也都會被這個問題困住一兩個星期。
以 Java/JDK 為例, JDBC 驅動程序中,對這個問題也經過多年、歷經多次版本升級,才能解決。而且代碼還不能跨數據庫。
C# 也一樣,總之是麻煩。
其實,這個問題可以有另一思路,更簡單,更高效。值得系統架構師們考慮:
1. 在數據庫中,單獨用一個表,處理所有各類文件,只保存文件的信息
TT_BINARY_DATA_INFO (bin_uuid, file_size, file_name,data_type,compress_format,memo,created_dt,created_by,updated_dt,updated_by,updated_cnt)
上面的表中, compress_format 為文件壓縮格式,可以不壓縮,也可以用 zip 壓縮格式,或者其它。
2. 在指定目錄中,保存文件內容(按年月劃分子目錄,或者不分子目錄),文件名為 uuid.dat
采用這一種方案的原因是,數據庫系統通常處理不好二進制數據,要么數據多了很占用磁盤空間,導致數據庫性能下降、備份時間更長;要么是文件大了無法保存。而采用以上方案,這些問題都不存在:備份更快了;文件大了也能輕松應付;程序更容易寫;不論哪種數據庫都可以用。
這一解決方案,目前在國內基本無人知曉,但在國外,舉例來說,Bugzilla/phpBB 都提供了選項,用戶可以把文件內容保存在數據庫中、或者保存在指定目錄中。并且,它們的文檔中,都推薦把文件內容,存放在指定目錄中下。想必它們經過認真的對比,發現“把文件內容,存放在指定目錄中下”更好吧。我也覺得這種方法更好,自從知道這種解決方法,我把我所負責的項目,都轉換成這種方式了,效果很不錯。

浙公網安備 33010602011771號