2015-11-02 68 views
1

問題是返回mongodb與bson圖像編碼的結果。我決定,我會遠離將圖像從目錄中拉出來作爲圖像,並通過將所有內容放入mongodb中來看看我能夠如何相處。但現在的問題是:包含圖像的mongodb結果的高效和有效返回

  1. 我返回了很多結果。
  2. 這些結果需要從mongo中提取圖像。
  3. 很多這些圖像實際上是相同的。

我正在使用大量內存,而不是讓瀏覽器通過靜態鏈接在我的HTML結果中正確的圖像執行緩存,我正在查找並在結果中顯示每個圖像以下內容:

<img src="data:image/png;base64,{{result._img}}" title="{{result.name}}" width="80px" align="center"> 

所以我猜測,雖然很多SRC的是一樣的,我們不能,如果我們只是用一個簡單的得到相同程度的性能:

<img src="/static/images/myimage.png" title="{{result.name}}" width="80px" align="center"> 

數的結果運行到他們的t千人,不同圖像的實際數量在10以上。我可以做些什麼來減少我的總數據負載,而不是重新設計我拉取圖像的方式?

我生產的瓶,結果通過以下方式產生:

  1. 獲得從圖像採集,放入圖像字典
  2. 獲取所有結果(無圖像)所有圖像
  3. 循環通過每個結果並執行連接,但從圖像字典中拉出圖像,將其添加到結果中。
  4. 回報render_template
+0

爲什麼不將這些10-ish圖像緩存在本地網絡服務器上?你的服務邏輯只需要找出它需要加載哪個鏡像。您可以在MongoDB中存儲每張圖片的md5哈希值,以使其更快更快 – Jaco

+2

或者只是創建一個單獨的端點來實際檢索圖片。如果他們經常被調用,那麼瀏覽器緩存將有助於提高性能。所以使用它。 –

回答

1

如果你真的想只用MongoDB中要做到這一點,我建議:

  1. 創建第二個收集實際存儲圖像。不要將它們存儲爲主要記錄的斑點。您的圖片收藏將只有兩個字段,image_blobimage_hash。讓我們打電話給這個集合images
  2. 插入記錄時,請爲圖像塊創建image_hash,然後檢查images集合中是否存在重複記錄。
  3. 在您的服務器上創建一個如下所示的新端點:localhost/api/images/<image_hash>.png確保您的緩存標頭設置爲永久緩存,因爲如果圖片發生變化,您將擁有新的URL。
+0

好的,謝謝,它看起來像瀏覽器緩存它。我將爲圖像創建一些端點。這似乎是明智的。 – disruptive