亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

要做還是不做:將圖像存儲在數據庫中

要做還是不做:將圖像存儲在數據庫中

素胚勾勒不出你 2019-12-18 12:08:29
要做還是不做:將圖像存儲在數據庫中在Web應用程序的上下文中,我的老板總是說要在數據庫中引用圖像,而不是圖像本身。我傾向于同意在DB中存儲url與映像本身是一個好主意,但在我現在工作的地方,我們在數據庫中存儲了很多圖像。我能想到的唯一原因也許是它更安全?你不想有人和網址有直接聯系?但是,如果是這樣的話,您總是可以讓網站/服務器處理圖像,就像ASP.NET中的處理程序一樣,這樣用戶就需要進行身份驗證才能查看圖像。我還認為從數據庫中提取圖像會影響性能。為什么將圖像存儲在數據庫中可能是一個好/不太好的主意,還有其他原因嗎?
查看完整描述

3 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

如果你偶爾需要檢索圖像,它必須在幾個不同的Web服務器上可用。但我想差不多就是這樣了。

  • 如果它不必在多個服務器上可用,最好將它們放在文件系統中。
  • 如果它必須在多個服務器上可用,而且系統中實際上有某種負載,那么您將需要某種分布式存儲。

我們在這里討論的是一個邊緣案例,您可以通過利用數據庫來避免給系統增加額外的復雜性。

除此之外,別這么做。



查看完整回答
反對 回復 2019-12-20
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

在數據庫中放置圖像的優點。

  1. 交易。當您保存BLOB時,您可以像任何其他DB數據一樣提交它。這意味著您可以將BLOB與任何關聯元數據一起提交,并確保兩者是同步的。如果磁盤空間用完了呢?不承諾。文件沒有完全上傳?不承諾。愚蠢的應用錯誤?不承諾。如果保持映像及其相關的元數據相互一致對您的應用程序很重要,那么DB可以提供的事務可能是一件好事。

  2. 一個要管理的系統。需要備份元數據和BLOB嗎?備份數據庫。需要復制嗎?復制數據庫。需要從部分系統故障中恢復嗎?重新加載DB并向前滾動日志。DBS給一般數據帶來的所有優點(卷映射、存儲控制、備份、復制、恢復等)適用于你的斑點。更一致,更容易管理。

  3. 保安。數據庫具有非常細粒度的安全特性,可以利用這些特性。模式、用戶角色,甚至是諸如“只讀視圖”之類的東西,以提供對數據子集的安全訪問。所有這些特性都適用于包含氣泡的表。

  4. 集中管理與#2相關,但基本上DBA(似乎沒有足夠的能力)可以管理一件事情:數據庫?,F代數據庫(特別是大型數據庫)可以很好地工作,可以跨幾臺機器安裝大型數據庫。單一的管理來源簡化了程序,簡化了知識轉移。

  5. 大多數現代數據庫都處理得很好。有了數據層中BLOB的一級支持,就可以輕松地將BLOB從DB流到客戶端。雖然有些操作可以同時“吸”整個BLOB,但如果您不需要該工具,那么就不要使用它。研究DB的SQL接口并利用它的特性。沒有理由把它們當作“大字符串”,它們被一刀切地處理,然后把你的氣泡變成大的、記憶的、吞食的、高速緩存的炸彈。

  6. 就像您可以為圖像設置專用文件服務器一樣,您也可以在數據庫中設置專用的BLOB服務器。為它們提供專用磁盤卷、專用模式、專用緩存等。DB中的所有數據都不是相同的,行為也不一樣,沒有理由對其進行完全相同的配置。良好的數據庫具有良好的控制水平。

從DB提供BLOB的主要NIT是確保HTTP層實際利用所有HTTP協議來執行服務。

許多簡單的實現只是抓取BLOB,然后將它們從套接字中大量丟棄。但是HTTP有幾個非常適合流圖像的重要特性,特別是緩存頭、eTags和塊傳輸,以允許客戶端請求BLOB的“片段”。

確保您的HTTP服務正確地響應了所有這些請求,并且您的DB可以是一個非常好的Web公民。通過將文件緩存到由HTTP服務器提供服務的文件系統中,您可以“免費”獲得其中的一些優點(因為一個好的服務器無論如何都會對“靜態”資源這樣做),但是要確保如果這樣做,就必須遵守修改日期等圖像的要求。

例如,有人請求Spaceeshuttle.jpg,這是2009年1月1日創建的圖像。最終緩存在請求日期的文件系統上,比如2009年2月1日。稍后,圖像將從緩存(FIFO策略或其他什么)中清除,稍后,有人在2009年3月1日再次請求它。現在它有了2009年3月1日的“創建日期”,盡管它的創建日期實際上是1月1日。所以,您可以看到,特別是如果您的緩存發生了很大的變化,使用if修改的頭的客戶端可能會獲得比他們實際需要的更多的數據,因為服務器認為資源已經改變了,而實際上它沒有改變。

如果將緩存創建日期與實際創建日期保持同步,這可能會減少問題。

但關鍵是,要想成為一個“優秀的網絡公民”,并為你和你的客戶節省一些帶寬等,就必須仔細考慮整個問題。

我剛剛為一個為DB提供視頻的Java項目進行了所有這些工作,這一切都很好。



查看完整回答
反對 回復 2019-12-20
  • 3 回答
  • 0 關注
  • 445 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號