|
軟件開發(fā)人員,都會(huì)碰到這個(gè)問題,也都會(huì)被這個(gè)問題困住一兩個(gè)星期。
以 Java/JDK 為例, JDBC 驅(qū)動(dòng)程序中,對(duì)這個(gè)問題也經(jīng)過多年、歷經(jīng)多次版本升級(jí),才能解決。而且代碼還不能跨數(shù)據(jù)庫(kù)。
C#也一樣,總之是麻煩。
其實(shí),這個(gè)問題可以有另一思路,更簡(jiǎn)單,更高效。值得系統(tǒng)架構(gòu)師們考慮:
1.在數(shù)據(jù)庫(kù)中,單獨(dú)用一個(gè)表,處理所有各類文件,只保存文件的信息
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.在指定目錄中,保存文件內(nèi)容(按年月劃分子目錄,或者不分子目錄),文件名為 uuid.dat
采用這一種方案的原因是,數(shù)據(jù)庫(kù)系統(tǒng)通常處理不好二進(jìn)制數(shù)據(jù),要么數(shù)據(jù)多了很占用磁盤空間,導(dǎo)致數(shù)據(jù)庫(kù)性能下降、備份時(shí)間更長(zhǎng);要么是文件大了無(wú)法保存。而采用以上方案,這些問題都不存在:備份更快了;文件大了也能輕松應(yīng)付;程序更容易寫;不論哪種數(shù)據(jù)庫(kù)都可以用。
這一解決方案,目前在國(guó)內(nèi)基本無(wú)人知曉,但在國(guó)外,舉例來(lái)說,Bugzilla/phpBB 都提供了選項(xiàng),用戶可以把文件內(nèi)容保存在數(shù)據(jù)庫(kù)中、或者保存在指定目錄中。并且,它們的文檔中,都推薦把文件內(nèi)容,存放在指定目錄中下。想必它們經(jīng)過認(rèn)真的對(duì)比,發(fā)現(xiàn)“把文件內(nèi)容,存放在指定目錄中下”更好吧。我也覺得這種方法更好,自從知道這種解決方法,我把我所負(fù)責(zé)的項(xiàng)目,都轉(zhuǎn)換成這種方式了,效果很不錯(cuò)。
it知識(shí)庫(kù):數(shù)據(jù)庫(kù)系統(tǒng)中文件附件保存的最佳辦法,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。