可能有幾個關於這個問題,但我想得到一個更新的答案,因爲現在大多數答案都是舊的。哪個會更好地存儲圖像,數據庫或文件系統?在sql數據庫或文件系統中的照片(2012)
我認爲facebook正在使用數據庫,因爲圖像可以有多種擴展名: 看到這個鏈接,例如:jpegjpgpnggif
可能有幾個關於這個問題,但我想得到一個更新的答案,因爲現在大多數答案都是舊的。哪個會更好地存儲圖像,數據庫或文件系統?在sql數據庫或文件系統中的照片(2012)
我認爲facebook正在使用數據庫,因爲圖像可以有多種擴展名: 看到這個鏈接,例如:jpegjpgpnggif
雖然看起來如此,但這不是品味問題,而是性能問題。 我已經嘗試過兩種方式,對於現在活着並且踢腳的項目,並且在他們的發展期間吸取了教訓。
將文件存儲在數據庫中可能看起來是創建易於部署,維護等一體化設置的好方法。但是對於較大的文件(例如高分辨率圖像),它可能會顯着增加你加載時間。另一方面,對於較小的圖像,作爲用戶頭像,產品縮略圖和其他縮略圖,通過減少對服務器文件系統的請求,可以提高加載速度。在這種特定情況下,這一切都取決於您可能擁有的SQL技能和查詢的優化級別。
我會給你一個建議,我都用我自己現在在項目涉及許多圖像,而不是隻有那些。
在數據庫中創建一個表,其中大致有以下幾種結構:
id INT(5) AUTO_INCREMENT PRIMARY KEY
filename VARCHAR(255)
fullsize_path CHAR(255)
image BLOB
mime CHAR(25)
size INT(20)
嗯...你的想法,BLOB字段是你的形象是怎麼回事。如果是某種縮略圖,fullsize_path將不會留空,並提供完整大小的圖像的路徑。
通過這種方式,當顯示包含產品的頁面時,所有查詢都是基於SQL的,但是當訪問特定產品時,fullsize_path將告訴瀏覽器哪裏可以找到大哥哥。
當然,你有更多的事情需要擔心部署這樣的事情時,我將概述這裏有幾個:
當然,之前做一些性能測試是非常寶貴的做法!
我會建議存儲在您的網站在圖像/文件夾或類似的東西的文件,我會救他們的名字與一個隨機數或ID,然後商店信息在數據庫中。這將是一個很好的組合!
我已經完成了使用兩種存儲方式的系統,而且通常取決於上下文。
對於訪問大量低服務器數量文件(通常爲1個服務器)的系統,存儲在文件中更容易開發和維護。
對於服務器數量很高的系統,所有服務器都需要訪問這些文件。有時我用文件和rsync設置它。有時我將文件存儲在數據庫中,讓複製處理它。
Facebook或其他網站將數據存儲在數據庫中的原因很可能是因爲這一點。他們需要在很多服務器上訪問文件,而不需要額外的文件複製。
將圖像存儲在數據庫中比將數據存儲在文件系統中安全得多。但在性能方面,將圖像存儲在文件系統中效率很高。我們必須根據我們的要求選擇最佳方式。
您可能還想看看Filetable選項。插件是更簡單的編程模型(可以使用T-SQL和Windows API)和更簡單的管理(通過SSMS),但是這樣做會使數據庫變大。如果選擇此選項,則需要將文件表放置在專用文件組上,並且您需要調整備份策略以包含文件組備份。
另一種可能性是看看RBS(遠程BLOB存儲),它作爲SQL Server 2012功能包(不在主要產品中)的一部分提供。