2012-06-23 82 views
0

此問題與數據庫/ RDBMS有關,我對性能和記錄處理知之甚少。將圖像存儲到數據庫中

如果我們需要存儲與某些記錄相關的圖像,那麼更好的選擇是什麼(性能明智)。是否應該將圖像作爲字段存儲到數據庫中,或者保存我們自己的文件並將文件路徑存儲到數據庫中。

我認爲目前的rdbms應該能夠很好地處理自己的圖像文件,我們可以依賴那些。但是,如果多個記錄(或來自不同tablse的記錄)引用相同的圖像,那麼我認爲,最好是存儲文件路徑而不是自我形象。

期待數據庫專家的參與。

+0

是將圖像存儲在文件中。數據庫中的文件路徑是一種很好的方法。 – vijay

回答

2

微軟研究院有一篇名爲To Blob or Not To Blob的非常好的論文。

他們大量的性能測試和分析後得出的結論是這樣的:

  • 如果您的圖片或文檔通常低於在大小256K,將它們存儲在一個數據庫VARBINARY列更有效

  • 如果您的圖片或文檔的大小通常超過1 MB,將它們存儲在文件系統中效率更高(並且使用SQL Server 2008的FILESTREAM屬性,它們仍處於事務控制和數據庫的一部分)

  • 在這兩個之間,這取決於您使用

當然有點難以取捨,這是特定於SQL Server - 但我敢打賭,其他RDBMS也會有類似的行爲 - 達到一定大小,沒關係,並且實際上更好(更高性能)將圖像存儲到數據庫中,但是如果它們變得太大,它們就會成爲關係引擎的負擔。

將路徑名存儲到數據庫中並將實際圖像保留在數據庫引擎之外的問題當然是您無法控制數據庫中是否存在該圖像文件,是否存在被重新命名或移動。在文件系統操作上沒有「交易保護傘」 - 因此,即使名稱存儲在數據庫表中,您也需要能夠處理事實文件可能不再存在的情況。

具有FILESTREAM功能的SQL Server修復了這個問題 - 文件保留在磁盤上 - 但SQL Server對它們有一個「事務保護傘」,並且不能在沒有SQL Server知道它(並允許它)的情況下刪除或移動它們。

0

將圖像存儲在文件系統上或(更好的是)存儲在CDN或諸如Amazon S3中。在RDBMS中只存儲元數據(包括實際圖像文件的位置)。