2016-05-01 90 views
0

我正在創建一個簡單的系統,用戶可以通過在搜索框中輸入該圖像的名稱來查看小圖像。我無法決定如何以最有效的方式存儲圖像。我想到的3個解決方案,我想知道哪一個是對這個問題的最佳解決方案:將圖像存儲在數據庫vs文件服務器上與服務器上的Zip文件

  1. 存儲圖像的斑點或Base64串在一個數據庫和基於與用戶輸入加載圖片簡單的查詢。這樣做會增加數據庫的負載並導致更長的加載時間。

  2. 將圖像作爲單獨文件存儲在文件服務器上。通過根據用戶輸入分配image.src屬性來加載它:image.src =「./server/images/」+ userInput;然而,這樣做會增加我服務器上的文件請求數量,所以它會更加昂貴。或者最後,我可以將圖像存儲在文件服務器上的一個zip文件中。在程序開始時立即下載。這樣做的好處是,加載頁面時只會有一個請求。但是,加載所有文件需要一些時間。

請注意,每個圖像的大小約爲1-3KB。所有圖像將手動放置在服務器/數據庫中。此外,最多隻有100-200幅圖像。所有這些考慮可能無關緊要。但我想知道推薦的方法是什麼。

注意:我運行的服務器是AWS服務器,我發現請求太多會增加服務器的成本。這就是爲什麼我對方法nr懷疑。 2

+1

#3很可能是一個不起動。如果你有10K圖像並且用戶只能查看1K(或500,或其他),會發生什麼?您已經使用帶寬來傳輸絕大多數內容從未使用的文件,並增加了將從zip文件查看的*文件定位和提取到磁盤上可加載的臨時文件的開銷觀看。您還添加了在添加或刪除圖像時更新zip文件的開銷和複雜性。 –

+0

只有大約100張圖片。但是你所說的話仍然適用。好點子。 –

+0

至於你的筆記,無論是請求從數據庫還是從磁盤加載圖像,你都會有相同數量的請求。 –

回答

1

我也管理存儲的圖像並從AWS EC2中檢索。我的解決方案和對您的建議與選項2類似,但添加緩存可以減少服務器請求。

將圖像保存在一個文件夾中,或者更好地存儲在S3存儲中,並根據包含URL的數據庫查詢或僅圖像名稱的名稱進行調用。然後將其放置在HTML中的佔位符內。

Select url from img.images where image_name='blue_ocean' 

然後我把它綁定到一個佔位符在HTML

<img src="/images/< blue_ocean>.jpg alt=""> 

關於許多請求到服務器,您可以緩存圖像,我建議使用Service Workers一個強大的WebAPI允許緩存圖像,並因此減少服務的數據量。

另一種方法是通過解析它的X,Y使用Sprites,其是一個文件或圖像片,其包含了所有的請求的圖像,因此代替許多請求時,只有一個請求,然後抓住每個所需圖像,座標。這種方法非常有效,可用於遊戲中,以減少多次請求短時間內多個圖像的開銷。

相關問題