2012-04-25 66 views

回答

2

雖然看起來如此,但這不是品味問題,而是性能問題。 我已經嘗試過兩種方式,對於現在活着並且踢腳的項目,並且在他們的發展期間吸取了教訓。

將文件存儲在數據庫中可能看起來是創建易於部署,維護等一體化設置的好方法。但是對於較大的文件(例如高分辨率圖像),它可能會顯着增加你加載時間。另一方面,對於較小的圖像,作爲用戶頭像,產品縮略圖和其他縮略圖,通過減少對服務器文件系統的請求,可以提高加載速度。在這種特定情況下,這一切都取決於您可能擁有的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將告訴瀏覽器哪裏可以找到大哥哥。


當然,你有更多的事情需要擔心部署這樣的事情時,我將概述這裏有幾個:

  • SQL服務器的性能
  • SQL託管圖片最大尺寸(字節)
  • 待存儲的圖像的量

當然,之前做一些性能測試是非常寶貴的做法!

1

我會建議存儲在您的網站在圖像/文件夾或類似的東西的文件,我會救他們的名字與一個隨機數或ID,然後商店信息在數據庫中。這將是一個很好的組合!

0

我已經完成了使用兩種存儲方式的系統,而且通常取決於上下文。

對於訪問大量低服務器數量文件(通常爲1個服務器)的系統,存儲在文件中更容易開發和維護。

對於服務器數量很高的系統,所有服務器都需要訪問這些文件。有時我用文件和rsync設置它。有時我將文件存儲在數據庫中,讓複製處理它。

Facebook或其他網站將數據存儲在數據庫中的原因很可能是因爲這一點。他們需要在很多服務器上訪問文件,而不需要額外的文件複製。

0

將圖像存儲在數據庫中比將數據存儲在文件系統中安全得多。但在性能方面,將圖像存儲在文件系統中效率很高。我們必須根據我們的要求選擇最佳方式。

0

您可能還想看看Filetable選項。插件是更簡單的編程模型(可以使用T-SQL和Windows API)和更簡單的管理(通過SSMS),但是這樣做會使數據庫變大。如果選擇此選項,則需要將文件表放置在專用文件組上,並且您需要調整備份策略以包含文件組備份。

另一種可能性是看看RBS(遠程BLOB存儲),它作爲SQL Server 2012功能包(不在主要產品中)的一部分提供。

相關問題