2009-07-09 89 views
10

我的具體情況存儲上傳的照片和文件 - 文件系統VS數據庫BLOB

物業管理的網站,用戶可以上傳照片和租賃文件。對於每個公寓單元,可能有4張照片,因此係統中不會有大量的照片。

對於照片,每個都會有縮略圖。

我的問題

我的首要任務是性能。對於最終用戶,我想加載頁面並儘可能快地顯示圖像。

我應該將圖像存儲在數據庫或文件系統中,還是無所謂?我需要緩存任何東西嗎?

在此先感謝!

回答

9

文件系統。沒有比賽。 將數據存儲在數據庫中時,數據必須經過更多層。

在緩存上編輯: 如果您想在用戶上傳文件時緩存文件,以確保操作儘快完成,則將文件直接轉儲到磁盤(即文件系統)的速度要儘可能快。只要文件不是太大,並且沒有太多的併發用戶,就可以將文件「緩存」在內存中,返回給用戶,然後保存到磁盤。說實話,我不會打擾。

如果您在上傳文件後想要緩存文件以提高性能,那麼文件系統仍然是最佳選擇。您將從Web服務器免費獲得緩存(可能需要調整一個或兩個設置)。如果文件在數據庫中,你不會得到這個。

畢竟,它聽起來像你永遠不應該在數據庫中存儲文件。不是這樣,你只需要一個很好的理由來這樣做。

+0

@Daniel。爲了獲得最佳的緩存性能,我必須在Web服務器上調整「一兩個設置」是什麼? – AngryHacker 2009-10-10 05:26:14

+0

請您澄清一下,如果瀏覽器本身對圖像文件進行緩存的話,緩存文件是必要的。 – 2011-06-05 14:45:00

10

雖然每件事都有例外,但一般情況下,將圖像存儲在文件系統中是最佳選擇。您可以輕鬆地爲圖像提供緩存服務,您無需擔心處理圖像處理的其他代碼,並且如果需要,可以通過標準圖像編輯方法輕鬆地對圖像進行維護。

這聽起來像您的商業模式很適合這種情況。

+1

想要添加,丹尼爾說,數據庫只是一個層,提問者想要放置文件。 – Dykam 2009-07-09 17:49:44

+4

+1同意 - FS在這種情況下傳遞。有一點需要注意,如果/當你將有大量文件時,它是一個理智的文件系統結構(例如,在一個文件夾中沒有十萬個文件)。也就是說,保持你的路徑在數據庫和磁盤上的文件。 – DarkSquid 2009-07-09 18:30:28

3

將您的圖像一定存儲在文件系統上。在考慮這些類型的事情時,人們認爲不夠充分的擔憂是膨脹;將圖像作爲二進制blob填充到數據庫中是一種非常快速的方式,可以讓你的數據庫發展壯大。隨着大型數據庫帶來更高的硬件要求,更復雜的複製和備份需求等。將文件系統粘貼到文件系統意味着您可以輕鬆簡便地使用許多現有工具對其進行備份/複製。存儲空間在文件系統上比在數據庫中要容易得多。

1

a DB 可能在某些操作上比文件系統更快,但加載一個明確標識的KB數據塊100s不是其中之一。

此外,一個好的前端網絡服務器(比如nginx)比任何你必須編寫的web應用程序層更快地讀取數據庫中的blob。在一些測試中,nginx大致與memcached一樣,用於處理中等大小文件(如大型HTML或中等大小的圖像)的原始數據。

去FS。沒有比賽。

1

也許有輕微的切線,但在從MySQL大會上,有關網站smugmug如何使用MySQL和其他各種技術的卓越性能演示會談this視頻。我認爲這個視頻建立在這裏發佈的一些答案上,但也提出了改善數據庫範圍之外的網站性能的方法。

2

評論到Sheepy的答案。

在SQL常用的存儲文件是更好,當文件大小小於256千字節,值得當它大於1兆字節。因此,256-1024千字節取決於幾個因素。閱讀this瞭解更多關於使用SQL或文件系統的原因。

相關問題