2011-05-17 36 views
3

我正在寫一個應用程序,它將存儲大量的圖像(可能是視頻)文件。在他們上傳之後,他們將立即被推送到服務於CDN的雲服務中,以便向公衆提供實際服務。這個想法是將圖像存儲在一個可靠的,可後退的商店中。我預計每個200,000個對象的順序可能高達10KB,並且可能少於幾MB的視頻文件。將大量圖像存儲在數據庫中?一個很好的體驗?

默認情況下,我會去Postgres的documentation suggests會好的。

  • 這是一個明智的想法嗎?
  • 它會爲數據庫備份一個完整的噩夢。經驗?
  • 任何可靠性問題?
  • 這會影響db的其他部分的性能嗎?請記住,數據庫將只被擊中一次或兩次爲每個圖像。
+0

[存儲在數據庫圖片? - 是啊,或者不然]的可能重複(http://stackoverflow.com/questions/3748/storing-images-in-db-yea -or-nay) – Mat 2011-05-17 11:42:17

+0

請重新閱讀[常見問題](http://stackoverflow.com/faq),您的問題並非真正客觀地回答,您正在徵求意見。 – Mat 2011-05-17 11:43:35

+0

問題經歷......那很好,對嗎? – GolezTrol 2011-05-17 11:45:55

回答

5

我有在Oracle和MySQL中以這種方式將圖像存儲在數據庫中的經驗。性能和可靠性不是問題。備份是。您的備份會變得非常大。由於備份是耗時且昂貴的,因此節省空間可能是個好主意。如果這意味着只需從數據庫中刪除圖像就可以將數據庫縮小80%,將它們存儲在其他位置可能是個好主意。備份單獨的文件效率更高,因爲您可以輕鬆創建僅包含新圖像和修改過的圖像的增量備份。

2

我的經驗僅限於SQL服務器,但是我有數百萬個PDF文件,它們在數據庫中大於10KB,這仍然表現得非常好。當然,索引是必需的。完整的數據庫備份不會超過預期的數據量。再次,這是爲MS-SQL服務器!

3

我有使用PostgreSQL的經驗,將圖像存儲爲ByteA(一種類似BLOB的數據類型),一種很好的體驗,並將圖像存儲在「dual solution」(文件系統中的圖像,數據庫中的元數據如MySQL和PostgreSQL)推薦。

有3個方面,或架構考慮,可以幫助我們在決定:

  1. 統一的解決方案或沒有?今天,當我們看到圖像體積(圖像的大小和數量)不斷增長並且在不斷增長時,在所有應用中,「統一解決方案」是目標。例如:Wikimedia是維基百科的統一和專業解決方案。
  2. 直接或間接存儲?像舊的「雙重解決方案」,不存儲圖像到SQL表中,一些解決方案可以使用外部數據庫或外部數據指針...在PostgreSQL BLOB數據類型有間接存儲(生成一個分離的備份),BYTEA數據類型是直接用表格備份)。選擇需要技術和性能方面的考慮。
  3. Original or processed images?對於需要數據庫存儲(用於緩存!)的「原始圖像」和「已處理圖像」(如縮略圖),我們需要一些區別,但不需要備份。

我建議:

  • 存儲作爲在你的餐桌BLOB(二進制大對象,具有間接店):原創形象店,但分開備份。見Ivan's answerPostgreSQL additional supplied modulesHow-tos

  • 存儲作爲BYTEA(或BLOB)中,在分離的數據庫(用DBlink):對原始圖像存儲在另一(統一)數據庫。在這種情況下,我preffer bytea,但blob是幾乎相同。分離數據庫是「統一圖像web服務」的最佳途徑。

  • 存儲爲bytea(BYTE Array with direct store)at your table:用於緩存已處理的圖像(通常爲縮略圖)。緩存小圖像以快速發送到網頁瀏覽器(避免渲染問題)並減少服務器處理。緩存基本元數據,如寬度和高度。數據庫緩存是最簡單的方法,但檢查您的需求和服務器配置(例如Apache模塊):store thumbnails at file system可能會更好,比較性能。請記住,它是一個(統一的)網絡服務,然後可以存儲在沒有備份的分離數據庫中,爲多個表提供服務。另請參見PostgreSQL binary data types manualtests with bytea column