2016-01-14 68 views
1

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

从阅读previous SO posts它似乎可以在Elasticsearch中存储base64图像。

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

我的具体问题是(1)在我的文档图中将图像作为二进制和弹性答复返回base64图像,而不是<img>标签,然后需要另一个调用Apache? (2)elasticsearch是否可以与静态nginx或apache图像服务器相媲美?

回答

1

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

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

尽管如此,如果你有几个股票报价文件,也就是说不是数百万的话,那么在ES中存储图像的base64可能就没问题了。

要做的最好的事情总是试试看看你的集群如何处理它。也许对于你的具体用例来说,它是完全没问题的。只是你会在ES上增加额外的负担,而这首先不是要处理的。

例如,如果返回十个结果,您的回复将从几KB增加到至少1 MB,并且您的用户需要等待该转移才能看到一些结果,而如果您存储了您的图像可以在其他地方显示,您至少可以向用户快速显示结果,并让浏览器异步处理图像检索,而不必关心它。

+0

很高兴知道,非常感谢您的解释。 – Chris

1

尽管可以将二进制数据存储在搜索索引中,但您应该避免为大型二进制文件执行此操作。

将二进制文件存储为内存中的fielddata(FieldCache)可以使您的系统快速从堆空间运行,而将它们存储为基于磁盘的fielddata(DocValues) - 使ElasticSearch更像一个典型的“列存储” - 将加载全部文件的图像到文件系统缓存。 (DocValues记录在here)。

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

+0

好的,很高兴知道,谢谢! – Chris