2013-02-08 102 views

回答

3

的經驗法則是你不應該在數據庫中存儲的圖像。 Blob是可用的,但相當糟糕。

你應該做的是將二進制文件存儲在比數據庫快許多倍的文件系統上,並在數據庫中存儲路徑或鏈接或文件名,並讓應用程序從路徑加載圖像。

這使您可以輕鬆實現像靜態文件的CDN或SAN存儲等東西。它甚至允許你使用類似lighttpd的東西顯示靜態內容圖像而不是apache。

https://blogs.oracle.com/manveen/entry/blob_vs_file_system_storage給多一點信息,但有大量的統計信息和數據的約斑點

的缺點在網絡上
+0

其他更深入的文章http://research.microsoft.com/apps/pubs/default.aspx?id=64525 – Dave 2013-02-08 14:21:05

0

使用BLOB數據類型,這意味着二進制大對象

0

BLOB的可能比文件存儲速度較慢,但​​它是非常容易複製,備份和恢復單個數據庫文件,而不是管理/維護文件結構中的圖像。

我還建議將圖像存儲在自己的專用數據庫中(將屬性/標記信息存儲在單獨的數據庫中)。

+0

我叮叮噹噹,下載文件並不複雜。其實,對我來說似乎更容易。 – 2013-02-08 14:29:42

+0

沒有它沒有。 tar -cf/imagefolder/imagebackup.tar就像那樣,將它設置爲自動備份的cron。也更容易備份到s3之類的東西,例如使用重複數據而不會導致數據庫服務器執行mysqldump的負載。由於db數據庫的大小從圖像存儲中增長,數據庫服務器的性能下降不足。 – Dave 2013-02-08 14:29:54

0

將圖像存儲在數據庫中是一個非常糟糕的主意。數據庫被確定爲保存一小段信息 - 而不是圖像或文件。你有這個目的的硬盤。
相反,您應該將圖像保存在磁盤上並將其文件名保存在數據庫中。這樣的:

$name = uniqid(); 
file_put_contents($name.".png",$image_data); 
mysql_query("INSERT INTO `images` (image) VALUES ('$name.png')") or die(mysql_error()); 

如果你真的堅持在DB保存圖像使用BLOB

0

簡單&優化選項是上傳服務器上的圖像,並在數據庫中存儲「圖像的網址」字符串。

Incase,你只想存儲實際的圖像文件,然後使用Blob數據類型。

相關問題