2011-11-18 52 views
6

可能重複:
Storing Images in DB - Yea or Nay?
Images in database vs file system將圖像文件或URL存儲在MySQL數據庫中?哪個更好?

我一直在開發使用RIA技術(Flex的+ PHP + MYSQL +阿賈克斯)Web應用程序,現在我在關於圖像文件的困境。我在我的Flex應用程序中使用了一些圖像,所以我認爲「如果我將它們存儲到數據庫中,然後從中檢索它,可能會很棒;因此,維護過程應該更容易」。但是,這是我的困境:

我應該存儲我的圖像的物理URL,或者如果我直接存儲圖像會更好嗎?

例如,應該我Cars表如下所示:

ID(autonumeric)| Source(文本)

或這樣嗎?

ID(autonumeric)| Image(LONGBLOB或BLOB)

我知道這裏是很酷的人能回答我這個問題,我解釋這是更好的,爲什麼:)

+0

網址,絕對更好。 – Mob

回答

6

我個人建議將圖像存儲在數據庫中。當然,它既有優點也有缺點。在數據庫中存儲BLOB數據的

優點:

  • 這是比較容易保持與該行的其餘項目同步BLOB數據。
  • BLOB數據備份與數據庫。擁有單一存儲系統可以簡化管理。
  • 可以通過MySQL中的XML支持來訪問BLOB數據,它可以返回XML流中數據的基本64位編碼表示。
  • 可以針對包含固定或可變長度字符(包括Unicode)數據的列執行MySQL全文搜索(FTS)操作。您還可以對映像字段中包含的格式化的基於文本的數據執行FTS操作,例如Microsoft Word或Microsoft Excel文檔。在數據庫中存儲BLOB數據的

缺點:

仔細考慮什麼樣的資源可以被更好地存儲在文件系統上,而不是在數據庫中。很好的例子是通常通過HTTP HREF引用的圖像。這是因爲:

  • 與使用文件系統相比,從數據庫檢索圖像會導致大量開銷。
  • 數據庫SAN上的磁盤存儲通常比Web服務器場中使用的磁盤上的存儲更昂貴。
+0

我不是數據庫專家,但結果緩存和數據庫服務器內存使用情況如何?它會增加很多,因爲blob將全部加載到ram中? –

4

正如你wan't,讓您的一般規則數據庫很小,所以它們表現更好(備份也更好)。所以如果你只能在DB中存儲文件系統引用(路徑+文件名)或URL,那會更好。

+0

不同意。如果管理得當,大型數據庫可以像小型數據庫一樣好。數據庫也是存儲圖像的理想平臺;在使用大型系統(如多臺Web服務器)時,直接從數據庫訪問這些數據庫可以解決很多問題,例如,您必須開始使用共享存儲(具有自己的問題)或複製文件(更多問題)。 – ChrisBint

+1

@ChrisBint如果您有一個網絡圖庫,並將圖像存儲在數據庫中,則所有工作和流量都必須通過數據庫服務器。如果您存儲路徑/ URL,則可以與您正在談論的多個Web服務器共享負載。但是每種情況都需要不同的方法,因此我說這是一個普遍的規則,而不是一個固定的法律。 –

+0

因爲您需要弄清楚如何共享文件,所以您無法「與多臺服務器共享負載」。 NFS?沒辦法......如果你失去了NFS共享,那麼是什麼?至少在一個數據庫中,你正在同步它們,如果需要的話可以訴諸主從。 – luckytaxi

0

我會存儲URL,這是較少的數據,這意味着一個較小的數據庫和更快的數據從中獲取;)

3

它大概是個人喜好問題。

一般來說,它更好地保持數據庫小。但是,當您訪問企業應用程序時,他們會將圖像直接添加到數據庫中。如果將它們放置在文件系統上,則db和您的文件系統可能不同步。

較大的CMS將定期將這些文件放在數據庫中。但請注意,這需要更大的數據庫大小,當一切正在增長時...

當您只保存網址和名稱時,請確保這些將來不會更改。

使用存儲在數據庫中的文件,您可以更輕鬆地實現安全性,而且不必擔心重複的文件名。

1

我曾經存儲路徑到URL中,但添加額外的Web服務器的混合證明不甚理想。首先,你必須分享存儲圖像的路徑。我們使用NFS,一段時間後它變得緩慢。我們嘗試將文件從一臺網絡服務器同步到另一臺,但這個過程變得很麻煩。

話雖如此,我會將它們存儲在數據庫中。之後我將所有的映像/文件存儲移至MongoDB。我知道這並不能滿足你的需求,但我們已經嘗試了一切(甚至是S3),我們對其他解決方案並不滿意。如果我們不得不,我肯定會把它們扔進MySQL。

0

就我個人而言,我總是保存網址。

沒有真正的理由不直接將圖像存儲在數據庫中,但有沒有將它存儲在數據庫中的好處。

如果不將圖像存儲在數據庫中,您將獲得更大的靈活性。您可以輕鬆移動它並只更新文件中的URL。因此,如果您想將圖像從Web服務器移動到諸如Flickr或Amazon Web Services等服務,那麼只需將鏈接更新到新文件即可。這也使您可以輕鬆訪問內容交付網絡,以便將圖像更快地交付給最終用戶。

相關問題