高效且有效地返回包含图像的mongodb结果

时间:2015-11-02 15:59:13

标签: python image mongodb flask

问题是从mongodb返回结果并编码了bson图像。我决定放弃将图像作为图像从目录中拉出来,看看如何将所有内容都放入mongodb中。但是现在的问题是:

  1. 我返回了很多结果。
  2. 这些结果需要从mongo中提取图像。
  3. 很多图片实际上是相同的。
  4. 我使用了大量内存,而不是让浏览器通过在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">
    

    结果数量为千位,不同图像的实际数量在10位。而不是重新设计我拉动图像的方式,我可以做些什么来最小化我的总数据负载?

    我在烧瓶上生产,结果以下列方式生成:

    1. 从图像集中获取所有图像,放入图像词典
    2. 获取所有结果(无图像)
    3. 遍历每个结果,然后执行连接,但从图像字典中提取图像,将其添加到结果中。
    4. return render_template

1 个答案:

答案 0 :(得分:1)

如果你真的想用MongoDB做这件事,我建议:

  1. 创建第二个集合以实际存储图像。不要将它们存储为包含主记录的blob。您的图片集只有两个字段image_blobimage_hash。让我们调用此集合images
  2. 插入记录时,请为图片blob创建image_hash,然后检查images集合中是否已存在重复记录。
  3. 在您的服务器上创建一个如下所示的新端点:localhost/api/images/<image_hash>.png确保您的缓存标头已正确设置为永久缓存此端点,因为如果图像发生更改,您将无论如何都会有新的URL。