【问题标题】:Elasticsearch as Image Server vs ApacheElasticsearch 作为图像服务器与 Apache
【发布时间】:2016-01-14 15:50:24
【问题描述】:

我使用 elasticsearch 来查询股票报价。我的浏览器调用弹性集群,它返回 <img> 标签内的 url 列表。然后浏览器调用图像(相关报价的股票图表)。这些图像位于单独的 Apache 2 http 服务器上。两台服务器都是相同的 Centos Quad core 2.0Ghz、16GB RAM、1Tb HD。

从阅读previous SO posts 看来,可以在 Elasticsearch 中存储 base64 图像。

是否有人在 elasticsearch 中创建了生产图像服务器,并且可能将基准与静态 Web 服务器进行了比较?在我的情况下,图像是 80 到 150 kb。

我的具体问题是 (1) 将我的文档映射中的图像作为二进制和弹性回复 base64 图像而不是 <img> 标签会更快吗?然后需要再次调用 Apache? (2)elasticsearch作为图片服务器是否可以与静态nginx或apache图片服务器相媲美?

【问题讨论】:

    标签: html elasticsearch


    【解决方案1】:

    Elasticsearch 是一个搜索引擎(除其他外),擅长为您的数据提供快速搜索。它不是内容服务器

    我将图像存储在 ES 中的唯一原因是如果我需要 search for similar images。在您的情况下,您似乎愿意使用 Elasticsearch 作为内容服务器来检索您的图像,这将更好地存储在内容交付网络 (CDN) 上,就像您现在使用第二个 Apache 服务器所做的那样。

    不过,实际上,如果您有一些股票报价文档(即不是数百万),那么将图像的 base64 存储在 ES 中可能是可以的。

    最好的办法是始终尝试一下,看看您的集群如何处理它。也许对于您的特定用例,它完全可以。只是你会给 ES 带来额外的负担,而它本来就不是要处理的。

    例如,如果您返回 10 个结果,您的响应将从几 KB 增长到至少 1 MB,您的用户将需要等待传输完成才能看到一些结果,而如果您存储了其他地方的图像,您至少可以非常快速地向用户显示结果,并让浏览器异步处理图像检索,而无需关心它。

    【讨论】:

    • 很高兴知道,非常感谢您的解释。
    【解决方案2】:

    虽然可以将二进制数据存储在搜索索引中,但对于大型二进制文件,您应该避免这样做。

    将二进制文件存储为内存字段数据 (FieldCache) 会使您的系统快速耗尽堆空间,而将它们存储为基于磁盘的字段数据 (DocValues) - 使 ElasticSearch 的行为更像典型的“列存储” - 将加载所有文档的图像到文件系统缓存。 (DocValues 记录在 here)。

    因此,从 nginx 或 Apache 提供和缓存图像似乎仍然是更好的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 2015-03-13
      • 2013-06-23
      相关资源
      最近更新 更多