簡體   English   中英

何時將圖像存儲在數據庫(mySQL)中,何時不存儲? (將圖像鏈接到數據庫中的項目)

[英]When to store images in a database(mySQL) and when not? (Linking image to item in database)

對不起,如果這不是這里要問的問題類型,但我通過常見問題解答閱讀,似乎應該沒問題。

背景信息:作為一個畢業項目的一部分,我的團隊正在為一家餐廳創建一個網站,該網站將顯示一個菜單。 菜單將具有鼠標懸停功能,以在用戶鼠標懸停項目名稱時顯示食物圖像。 我最初的計划是不將菜單信息存儲在數據庫中,因為它不會經常更改。 有兩個不同的位置有不同的菜單項。 總而言之,將所有信息存儲在數據庫中並使用HTML顯示它似乎是一種浪費。 我們的教授不像15年前那樣精通技術,告訴我們他知道將這些信息存儲在數據庫中會更好。 對我來說,這似乎真的會讓很多東西混淆而沒有附加價值。 最初我還計划將鼠標懸停的圖像存儲在服務器上的一個簡單文件夾中,但如果所有菜單項都存儲在數據庫中,我就不知道如何將不同的圖像鏈接到數據庫中的不同項目將圖像存儲在數據庫中。 該網站將主要使用HTML,PHP,MySQL和一些JavaScript我們也將開發一個Android應用程序,只是基本上模仿網站上的內容,如果這改變的話。

問題 - 參考我計划使用它們的方式,這會更好地存儲在數據庫中嗎? 如果是這樣,有沒有辦法在不將圖像存儲在數據庫中並將它們保存在服務器上的文件夾中,反之亦然的情況下執行此操作。

我在其他論壇上在線閱讀了很多,解釋說你通常想避免將圖像存儲在數據庫中,但由於我的教授認為他說菜單必須存儲在數據庫中是正確的,我認為我必須存儲數據庫中的圖像也是如此,鼠標懸停功能將正常工作。 如果這是可能的,我只使用鼠標懸停功能與服務器上的圖像位置,而不是引用數據庫。 感謝您的幫助和見解。

在數據庫中存儲圖像/ blob的優點

  • 存儲圖像自動成為您的交易的一部分
  • 無需清理文件系統並將其與數據庫同步
  • 通過與訪問其余數據相同的方式來控制對圖像的訪問
  • 只關心一個備份
  • 數據庫通常更適合存儲數百萬(如果不是數十億)的記錄。 在文件系統中,您必須在多個目錄中找到一個聰明的分布。 單個目錄將無法有效處理數百萬個文件。
  • 對於某些工作負載,將數據存儲在數據庫中實際上可能更快。
    對於SQL Server,Microsoft實際測試了這個:
    http://research.microsoft.com/apps/pubs/default.aspx?id=64525
    如果其他數據庫以類似的方式表現,我也不會感到驚訝。

缺點:

  • 使您的數據庫和備份更大(想想恢復它所需的時間)。
  • 通過增量備份,文件系統通常更好(除非你有Oracle的RMAN)
  • 其他應用程序無法訪問圖像(例如WebServer,圖像大小調整工具,FTP服務器)
  • 圖像無法在內容分發網絡中傳播,以便在Web應用程序中進行負載平衡(從應用程序服務器上卸載)
  • 常見的信念是,從數據庫中檢索會更慢。
  • 對於某些數據庫,檢索blob實際上可能會降低數據庫緩存的效率(對於Oracle,SQL Server和PostgreSQL則不然。但我不知道MySQL)

教授說“將菜單信息存儲在數據庫中”。 “菜單信息”顯然包括食品名稱,價格,描述,所有這些都是文字的。 他可能也可能沒有圖片。 這可能是通信問題的情況。 ...當預期信息經常變化時,使用數據庫; 它們需要輸出顯示子系統和輸入插入子系統。 如果您只打算寫一次,請務必將圖片放在目錄中。 但是,如果它將成為人們編輯和插入新條目的系統,那么您必須將圖片耦合到同一個DB表行中的菜單條目(更易於編寫),或者您必須編寫不同的子系統管理數據庫以及現在磁盤上的文件及其權限(更多移動部件)。

在數據庫中保存圖像通常是一個壞主意,我不知道,你被困在哪里。 只需保存每個菜單項的菜單圖像的路徑,你就可以了。

文件系統經過多年的微調,可以快速高效地傳輸文件。 不利用文件系統存儲圖像將忽略其最大的能力之一。

在我看來,數據庫和文件系統中存儲映像之間的完美合成是使用與時間戳結合的文件名將實際文件存儲在磁盤上,然后將該引用與其關聯的行存儲在數據庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM