我使用ASP.NET MVC + NHibernate + Postres堆棧編寫Web應用程序。我想知道上傳的圖像應該作爲二進制blob存儲在數據庫中還是存儲在文件系統中(僅在db中引用)。 我能想到的db存儲的一個優點是可以輕鬆備份/恢復所有數據,而無需恢復到文件系統複製工具。另一方面,我懷疑文件系統訪問可能會更快(但是,特別是在處理多個併發請求時)? 您有什麼建議?ASP.NET MVC圖像上傳存儲位置(db vs文件系統)
回答
我會這樣做 - 確保圖像存儲在數據庫中,以便所有數據都集中在一起以便於備份,但也將數據緩存到外部,以便對大圖像的重複請求不會使緩衝區高速緩存數據庫。如果正確完成,您可以引入新的前端Web服務器,這些服務器在啓動後會透明地從數據庫中填充本地圖像緩存。
集中存儲圖像對於確保您爲具有多個Web服務器的系統中的圖像發送良好的Last-Modified和ETag HTTP響應標頭也很有用,因爲這些標頭可以從數據庫內容製作而不是採用來自本地緩存對象。
只是PostgreSQL的一個實現說明:您可以將包含圖像數據的列的「存儲模式」設置爲「外部」:這將停止PostgreSQL嘗試壓縮圖像數據(使用zlib,而不是可能會提供任何好處),並會將圖像數據存儲在輔助TOAST表中,如果您只是查詢圖像元數據,則可以提供更好的性能。見ALTER TABLE命令「SET STORAGE」的條款,例如:
ALTER TABLE media.image ALTER COLUMN content SET STORAGE EXTERNAL
這取決於。你看重能夠直接鏈接到圖像,還是想要始終使用服務器端資源調用數據庫,然後爲圖像編寫二進制數據?
我們利用原稿存儲在數據庫進行備份,但產生的縮減是在文件系統緩存在Web服務器的圖像。
但是,如果可能,我們儘量避免任何往返數據庫,因爲它會產生巨大的負載,因爲一個頁面通常會在每個頁面視圖中調用多個圖像請求。
關於在數據庫中存儲blob的一個注意事項,我建議你將實際的blob-column存儲在一個專用的表中,並與您的實體/實體進行一一映射。這將緩解備份以及表格的更改。當表變大時,即使在備份期間,任何更改都將「永久」完成,並且鎖定是一個大問題。
如果您擁有關於圖像(二進制數據除外)的所有信息,除非您需要二進制數據(因爲它將緩存在文件系統中,您很少需要),所以選擇該數據不會受到影響。
只是我的兩分錢。
不同的數據庫有不同的存儲blob的方法:postgresql會自動將大的bytea值存儲在單獨的「toast」表中,因此不需要明確地執行此操作。 – araqnid 2010-04-29 13:49:48
實際上,爲了存儲圖像數據,可能建議使用「alter table ... alter column ... set storage external」來始終強制外聯存儲並禁用壓縮。 – araqnid 2010-04-29 13:57:04
嗯,這很奇怪,因爲我們使用postgres,並且在更改表格和備份時遇到表鎖定問題。 – jishi 2010-04-30 13:01:30
- 1. 存儲圖像:MongoDb vs文件系統
- 2. 複製上傳的圖像存儲在文件系統
- 3. 存儲圖像 - mysql與文件系統
- 4. 圖像存儲位置
- 5. Grails和Tomcat:在文件系統中存儲上傳文件的位置?
- 6. 如何在文件系統上存儲文件或圖像?
- 7. 緩存已存儲在文件系統上的解碼位圖
- 8. 在數據庫中存儲圖像vs在文件系統中存儲
- 9. 數據庫vs文件系統存儲
- 10. 上傳圖像/文件在asp.net MVC 2
- 11. 在數據庫vs文件系統上存儲xml文件
- 12. Xcode在文件系統上存儲$ {PRODUCT_NAME}的位置?
- 13. 從本地系統上傳圖像+ TinyMCE編輯器+ ASP.NET MVC
- 14. 存儲上傳的照片和文件 - 文件系統VS數據庫BLOB
- 15. ASP MVC從SQLite db與文件系統獲取圖像
- 16. 將圖像從ASP.NET上傳到godaddy文件系統
- 17. 將文件上傳到存儲位置
- 18. 在asp.net MVC 4 webapp中存儲用戶上傳文件的位置?
- 19. ASP.net MVC上傳圖像NullReferenceException
- 20. 在文件系統上存儲圖像有什麼缺點?
- 21. 存儲圖像?雲上的數據庫或文件系統
- 22. 顯示存儲在文件系統上的圖像
- 23. 使用asp.net在Db中存儲圖像
- 24. 將圖像存儲到本地系統的指定位置
- 25. ASP.NET上傳圖像,調整大小並保存到文件系統。
- 26. 個人資料圖像保存爲blob vs文件系統
- 27. 如何將上傳的文件存儲在文件系統中?
- 28. 上傳文件和存儲到php中的文件系統
- 29. ASP.Net MVC 2圖像上傳
- 30. 碼頭圖像物理存儲位置
可能的重複http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay – Cesar 2010-04-28 18:55:37
在專門的CDN服務器上? – Paco 2010-04-28 19:45:39