2010-03-15 171 views
2

有哪些優勢和存儲圖像在數據庫VS存儲在數據庫中只是文件名的BLOB的缺點。最佳方式存儲上傳圖像

我使用PHP(笨)與MySQL。

我知道這個問題是主觀的,但一個客戶問我這個問題,我無法給出很好的答案。

回答

14

我一般說:

  • 數據庫是難以規模:
    • 具有已經因爲圖像的尺寸爲幾GB會讓很多事情一個DB(備份,例如)更難。
    • 你想要把更多的負載您的數據庫服務器上,以服務...文件?
  • 從文件系統提供圖像的東西,web服務器做好
    • ,它可以讓一個做一些任務(如生成縮略圖,例如)不涉及DB服務器
    • 我猜想如果需要的話,在使用普通的舊文件也使事情變得更容易的一天,你要使用某種CDN的

這意味着我幾乎總是存儲圖像/文件在文件系統中,並且只存儲文件名(以及可能的大小和內容類型 - 可以總是有用的)數據庫


考慮一下,這個問題可能是重複的......哦,是的,它實際上是;看到至少有這些問題的答案+:

+0

帕斯卡爾·馬丁,你的答案似乎非常有說服力。但是,我必須說明,在嘗試使用這兩種方法的過程中,我沒有真正看到性能上的差異(即,在外部存儲圖像,而不是像BLOBS一樣將它們保存在數據庫中)。也許我的數據量並不多。另一個問題是,你是否建議從數據庫中讀取多個BLOB圖像要比從文件系統中讀取多個文件慢?我真的不能接受,但我看到的唯一問題是如果文件保存在外部,備份可能更小。 – itsols 2015-06-13 02:52:56

1

我懷疑你的客戶有足夠的經驗來判斷一個答案。
我曾被客戶問過將圖像嚴格存儲到數據庫中。經過一番調查後,我發現他們只是意味着「將圖像存儲在服務器端」,因爲他們以前有過一個MS Access數據庫,並且可以選擇將數據存儲在數據庫中,還是隻是鏈接到圖像,而圖像本身留在用戶的硬盤上並且經常不可用。

至於你的問題,我懷疑圖像與關係模型的任何關係。您不能根據blob內容對其他行進行排序,過濾和關聯。雖然你必須做很多事情來支持數據庫中的圖像 - 專用腳本來顯示,模擬條件獲取等。 我知道,這個功能是存在的。但更明顯的是嘗試追隨時尚,而不是真正的需求,尤其是在網絡開發中,圖片請求分開請求。

0

我更喜歡上傳時,重命名文件的圖像,並將它們存儲到與自己的父母(用戶,產品),DB行...然後將它們上傳到3文件夾:

/uploads 
    /img 
    /products 
    /small 
    /medium 
    /xxl 

它們調整成小(50x50),中等(90x90),xxl(原始尺寸),然後將它們移動到這些目錄中。

,如果你需要搜索引擎優化的圖像,你可以將它們存儲例如:

id | product | image 
1 book  1-book.png 

所以你會得到ID和產品名稱相同的圖像文件。

,或者你甚至可以只存儲

id | product | image 
1 book  1.png 

然後是簡單的附加SRC路徑:

/*Config file*/ 
$config['base_static_products_url'] = 'uploads/img/products/'; 

/*View file*/ 

<img src="<?php echo base_url().$this->config->config['base_static_products_url'].'/small/'.$row->image ?>" alt=""/> 

OR (no SEO) 

<img src="<?php echo base_url().$this->config->config['base_static_products_url'].'/small/'.$row->id.'.png' ?>" alt=""/> 
+0

看起來,它也取決於如果你需要將所有文件都存儲在同一個文件ext的圖像,如果你知道你只會使用PNG文件或只是JPG文件,你也可以不存儲任何東西在數據庫中,只需要用row_id上傳時重命名文件。 PNG – sbaaaang 2012-04-18 16:24:26

相關問題