2009-08-05 267 views
14

我在這方面看了一些帖子,但我仍然不明白什麼是最好的解決方案在我的情況。

我開始寫一個新的Web應用程序和後端將可提供約1-10萬的圖像。 (平均粒徑200-500kB單個圖像)
存儲圖像:數據庫或文件系統 -

我的網站將提供內容和圖片來100-1000用戶在同一時間。

我想也保持提供成本儘可能低(但這是次要的要求)。 我在想,如果與數據庫大小相比,文件系統空間更便宜。

個人而言,我喜歡有我在數據庫中的所有圖像,但任何建議將非常感激:)

你認爲在我的情況下,DB的做法是正確的選擇的想法?

+0

重複的http://stackoverflow.com/questions/1212832/most-efficient-way-to-store-a-20-meg-file-in-a-sql-server- 2005-image-column – andrewWinn 2009-08-05 18:25:55

+2

重複?我使用的是Java,mysql和圖像文件,它們是10MB的1/20 - 1/50。我的問題與特定技術無關,但需要存儲的圖像的大小/數量 – mickthompson 2009-08-05 22:37:32

回答

22

把所有這些圖片在你的數據庫將使它非常,非常大的。這意味着您的數據庫引擎會忙於緩存所有這些圖像(它並非真正爲此設計的任務),而是可以緩存熱應用程序數據。

保留文件緩存到OS和/或反向代理 - 他們將它更好。

+0

如果您可以負擔得起擴展,邊緣服務器應該爲您執行此操作。邊緣服務器將運行在HTTP流量之外,因此除了初始請求以外,與映像來源無關,以及在超時之後發生的請求子集。考慮到這一點,最好的方式是構建自己的數據庫層,以便它可以響應HEAD請求的正確信息,而無需訪問保存「整個」圖像的記錄。磁盤通常更快,但選擇數據庫並不意味着您必須放棄所有的性能。 – 2012-04-27 14:34:02

5

當二進制對象處理,按照架構文檔爲中心的方法,而不是存儲像PDF文件和圖像數據庫中的文檔,你最終將有當你開始看到各種性能問題與數據庫進行重構出來。只需將文件存儲在文件系統中,並將路徑放在數據庫的表格中。數據類型的大小還有一個物理限制,您將用它來序列化並將其保存在數據庫中。只需將其存儲在文件系統中並訪問即可。

+1

這個問題每天都會被問到。 – 2009-08-05 16:09:00

4

你的第一句話說,你讀過一些關於這個問題的帖子,所以我不會打擾投入鏈接到覆蓋此文章。根據我的經驗,根據您所發佈的內容以及圖像的數量和大小,如果將它們存儲在數據庫中,您將付出高昂的數據庫性能。我會將它們存儲在文件系統上。

0

我們使用FileNet,一種爲圖像優化的服務器。這個很貴。更便宜的解決方案是使用文件服務器。

請不要考慮在數據庫服務器上存儲大型文件。

正如其他人所提到的,存儲對數據庫中大文件的引用。

14

其他一些原因來存儲文件系統上的圖像:當數據庫忙或向下

  • 圖片服務器甚至可以運行。
  • 一些文件系統是存儲文件製成,是在它非常有效。
  • 將數據轉儲到您的數據庫意味着更慢的備份和其他操作。
  • 沒有服務器端編碼需要提供一個圖像,只是普通的舊IIS/Apache。
  • 您可以使用便宜的Web服務器或可能擴展到CDN的速度更快地擴展。
  • 您可以在不涉及數據庫的情況下執行相關工作(生成縮略圖等)。
  • 您的數據庫服務器可以將更多的「真實」表數據保存在內存中,這是您獲取數據庫查詢速度的地方。如果它使用寶貴的內存來保存圖像文件的緩存,那麼與內存中更多的照片索引相比,它幾乎不會以任何速度購買任何東西。
3

您使用的數據庫是? MS SQL Server 2008提供了FILESTREAM存儲

允許使用SQL Server 2008和NTFS文件系統的組合存儲和有效訪問BLOB數據。它涵蓋了BLOB存儲的選擇,爲使用FILESTREAM數據配置Windows和SQL Server,將FILESTREAM與其他功能組合的注意事項以及分區和性能等實施細節。

details

相關問題