2009-08-06 150 views
1

我的問題是關於顯示縮略圖和存儲。管理網站用戶照片的最佳方式是什麼?

比方說,我有一個網站,用戶可以上傳照片並在相冊中查看照片。

照片通常存儲在這種情況下如何?圖像本身還是通常存儲在數據庫中的文件路徑?

如果照片是大,你要顯示的縮略圖,是它更好地:

  • 保存圖像的副本,並縮小尺寸圖像,只有當要求顯示更大?
  • 使用HTML縮小尺寸?
+0

對於存儲確認問題http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay另外,我想保存圖像的縮略圖。 – Favio 2009-08-06 02:35:22

回答

4

將圖像存儲在數據庫中幾乎總是一個壞主意。 BLOB可以真正減慢數據庫的速度。這也限制了你在不同驅動器周圍傳播存儲的能力。當文件分開時,甚至可以有一個或多個單獨的映像服務器來減少主動態服務器上的負載。我的建議是:

  • 在您的數據庫表中,包含圖像所在的目錄和圖像名稱的列。這樣,您可以自由更改存儲圖像的位置,循環驅動器,稍後添加更多存儲空間並將新映像放入新存儲或任何您想要的內容。將路徑和文件名存儲在單獨的字段中使得將圖像從一個目錄移動到另一個目錄變得微不足道。

  • 您一定要生成縮略圖圖像以減少網絡帶寬並使您的應用程序運行更快。但是,您可以根據需要或系統負載較低的情況下生成縮略圖。如果你在Linux上,ImageMagick在自動批量調整圖像大小方面非常出色。它甚至可以通過百分比來調整大小,而不是絕對數量。

+0

https://imageresizing.net和http://imageflow.io足以快速生成縮略圖(單一來源成像)。您可以在後端使用網絡存儲或任何類型的blob存儲。 – 2016-05-20 22:49:46

0

某些軟件如TikiWiki將照片存儲在數據庫中。然後,它還會在數據庫中緩存縮略圖大小的照片。

其他軟件將其存儲在一個目錄中。這是Gallery2的運作方式。我發現目錄方法更具可擴展性。如果請求的尺寸不是原始尺寸,通常應用程序將使用ImageMagick調整照片大小,然後存儲調整大小的照片副本。

另一種替代方法是將照片重新上傳到像S3這樣的服務,而不是在本地存儲照片。

0

這是常見的問題,基本的答案是,它取決於。你需要提供更多信息。你打算使用哪個數據庫? SQL Server 2008具有一些用FILESTREAM函數處理這種情況的好的新功能。通常我更喜歡把它們放在數據庫中,但是如果你只是將它們放入其中而不考慮設計和訪問需求,那麼隨着照片數量的增加,性能可能會變差。

0

如果您絕對確定您的Web服務器將始終訪問託管映像的文件系統,請轉到該路由。也許。

但是,如果您在任何時候認爲您可能需要創建映像服務器,因爲Web服務器上的硬盤驅動器空間不足,或者需要運行多個Web服務器,然後省去麻煩並將它們存儲在數據庫中。存儲在文件系統中的難點在於跨網絡的安全需求。

另外,請記住,並非所有數據庫服務器在這方面都是相同的。 SQL 2008引入了FILESTREAM數據類型,它實際上將圖像存儲在本地文件系統上,同時允許通過數據庫服務器進行所有讀/寫訪問。這還有一個額外的好處,即允許您在存儲時對傳入文件運行病毒掃描程序。

甲骨文現在有一些不錯的文件存儲設施。 MySQL的?我不認爲我想嘗試,但你可能會好起來的。

至於第二個問題:與圖像一起保存縮略圖。此過程每個圖像只出現一次,並節省演示帶寬。使用HTML縮小圖像的大小確實對客戶端沒有任何幫助。

相關問題