首頁 培訓計劃 培訓課程 企業內訓 學員論壇 技術文章 成功案例 師資簡介 關于我們 在線留言  
行業新聞
使用數據庫存圖片

文章來源:http://www.kuqin.com/database/20100313/81424.html 作者: 發布日期:2010-04-27
打 印】【關 閉

圖片是網站上很重要的資源,用戶發布的產品圖片,用戶的logo,AV男,獸獸女,犀利哥等等等等,一個稍具規模的網站,圖片的數量可能是千萬級,這種資源的特點就是文件小,數量大,每個文件在幾字節到幾K不等,所以針對圖片的訪問,基本是非常離散的IO,考驗的是系統的磁盤并發和CPU處理能力

一般網站,圖片都是存放專門的圖片服務器,可集中也可以分布式,比如有條件的可以購買昂貴的NAS存儲,由主機拖著,以NFS或者HTTP的方式,供前面的應用訪問,或者使用多臺廉價PC,圖片分布打散到每個機器,前臺應用解決圖片存取和訪問策略,以便充分利用所有資源,在應用與圖片服務器中間還可能加一層cache,來緩沖前臺的訪問壓力

上面所說的方法,弊端是有很多的
1.文件系統一定是要使用的,為了管理數千萬的圖片,必須進行目錄分層,因為一個目錄下不可能存放太多的文件,前期的目錄規劃要考慮后期的擴展,還有圖片分布均勻,這樣做下來,往往目錄的深度會達到5層甚至7層
2.數據遷移,備份怎么做?高級的NAS存儲,有自己的卷復制,但這個粒度太粗,如果要細分到底層或中間層,會有點力不從心,對于這種大數據量的小文件拷貝,PC也是非常吃力
3.每一個圖片的訪問,基本會做5-7次的目錄跳轉,轉換到磁盤,也可能有10次物理IO了,在并發量上來的時候,磁盤會是個瓶頸,當然,分布式是個方向

這里想到了另外一種方法,利用數據庫來存放圖片,存儲的方式就是現在最流行的key-value

create table mypic
(
key number not null,
pic blob
);

create index ind_picid on mypic(key);

key是圖片名稱,事先最好統一規劃一下,使用number數字來命名,并針對key建立索引
VALUE就是圖片內容,用blob來保存
訪問一個圖片的方式就是:
獲取圖片名稱  數據key
走key上的索引,定位到記錄表記錄
根據表記錄,定位到圖片的blob,并讀取

這個方法的優點:
1.單個圖片的訪問路徑縮短,數字索引比較小,分區做的好的話可能小到兩層,從索引到表,到blob段,大概是4-5跳
并且KEY是區分度非常高的數據類型,在索引每層的橫向檢索中,不會超過1個數據塊,而文件目錄結構中,子目錄繁多,
要遍歷這層的inode后,才知道具體跳轉的下層位置
2.備份方式比較靈活,可以基于整個數據庫,或者單獨的表,數據的遷移,刪除,都是基于表級別的,比較直觀,方便
3.可以在數據庫層面,考慮圖片的水平拆分,垂直拆分,分表,分庫,都不錯
4.數據庫的復制技術可以派上用場,讀寫分離

這里數據庫完全是當成一個KEY-VALUE的存儲在用,我們可以考慮將一些廉價的PC堆在一起,做成一個picdb的群集,
大致畫了一個草圖,當然在WEB與picdb間應該還有層cache的,這個方法是YY出來的,可能很多地方不成熟,但SY強身,YY強國,沒有想法,哪來的動力?歡迎各位專業人士拍磚

本文來自:http://www.alidba.net/index.php/archives/400

打 印】【關 閉

上一篇:高效程序員的10個習慣
下一篇:程序員的.NET時代
相關新聞
版權所有©威課網 粵ICP備13058727號