2015-10-13 55 views
5

我知道不建議將圖像作爲BLOB存儲在SQL中。但是,在本地PC和服務器上工作都會使兩者之間的圖像同步變得困難。是否還有一個理由不僅僅將BLOB用作備份,而是在本地創建一個緩存文件(以靜態地提供服務)?MySQL Store Image BLOB Bad Practice Performance

從本質上講,選擇BLOB列時只是性能問題?如果唯一的影響是一個更大的表,那麼我沒有看到沒有將圖像直接關聯到表條目的原因。

+0

更多信息我知道這並不直接回答,但你能解釋一下爲什麼圖像不能共享?他們可以託管在服務器上(或CDN)嗎? – 1mike12

+1

@ 1mike12目前所有內容都存儲在本地,所有路徑都與基本目錄/網站url相關,以便在不同環境下進行簡單的開發。測試時不必擔心打破生產站點,這樣做更容易。只有MySQL數據庫是中心的。 也許將來我會轉而使用圖像集中系統,但現在這更多的是一個普遍的SQL問題,部分原因是出於好奇。 – nebkat

+2

將圖像(文件)存儲到BLOB字段沒有好的或不好的做法。這是相當需要的。基於偏見:我通常不會將圖像存儲到大型Java EE應用程序的文件系統中(嚴重的是,過去我完全厭倦這樣做),因爲它們無法與各自的數據庫操作同步,特別是當它們要被髮送到遠程EE服務器。一點性能損失和/或一點數據庫內存的低效率都不如正確性和完整性重要。另外,存儲在數據庫中的文件更安全。 – Tiny

回答

1

如果您可以公開您的圖像 - 我建議您將圖像保存在與您的數據庫不同的(也可能更便宜的)存儲上,例如S3。

但是,如果你的圖像應該私人存儲在數據庫中並不是最差的選項,但你需要在你的代碼中處理它們。

如果您使用mysql5.6和梭子魚格式(這是今天最常見的),那麼從MySQL的角度來看 - 存儲BLOB列將在磁盤上有2個數據搜索,而不是1個,因爲BLOB和TEXT列正在被保存在主數據頁面之外。

你可以閱讀這個Percona Blog Post