在前两篇有关Elasticsearch用例的文章中,我们已经看到Elasticsearch 可用于存储甚至大量文档 ,并且我们可以通过Query DSL使用Lucene的全文功能访问那些 文档 。 在这篇较短的文章中,我们将把两个用例放在一起,以了解读取繁重的应用程序如何从Elasticsearch中受益。
经典应用中的搜索引擎
看着经典的应用程序,搜索引擎是一种专门的东西,它只负责帮助一个功能,即搜索页面。
在左侧我们可以看到我们的应用程序,其大部分功能是通过查询数据库来构建的。 搜索引擎只占很小的一部分,并负责呈现搜索页面。
数据库非常适合许多类型的应用程序,但事实证明,扩展它们通常并不那么容易。 流量高峰的网站通常在扩展数据库访问方面遇到一些问题。 对机器进行索引和按比例缩放可以提供帮助,但通常需要专门的知识,并且可能变得非常昂贵。
与其他搜索功能一样,电子商务提供商尤其开始做一些不同的事情。 他们开始将搜索引擎不仅用于全文搜索,而且还用于页面的其他部分,无需用户直接输入关键字。 再次让我们看一下亚马逊上的页面。
这是可以使用导航访问的类别页面之一。 我们已经可以看到界面看起来与搜索结果页面非常相似。 有一个结果列表,我们可以使用构面对结果进行排序和过滤。 尽管我当然不了解亚马逊如何做到这一点,但通用的方法是也将搜索引擎用于此类页面。
扩展读取请求
电子商务网站的一个常见问题是流量激增。 根据您的业务类型,圣诞节前您可能会有更多的流量。 否则,当有电视广告为您服务或提供任何特殊折扣时,您可能不得不应对峰值问题。 闪购网站位于此类网站的末端,在开始销售的某个时间点,它们的峰值非常高。
事实证明,搜索引擎擅长于被查询很多。 不变的数据集(段)非常易于缓存。 当涉及到过滤器时,大多数情况下引擎也可以将其缓存。 在温暖的索引下,大多数数据将存储在RAM中,因此闪电般快。
回到我们可以在线访问的演讲示例。 想象一下一个导航,用户可以在其中选择要查看其事件的城市。 然后,您可以向Elasticsearch发出这样的查询:
curl -XPOST "http://localhost:9200/conferences/_search " -d'
{"filter": {"term": {"conference.city": "stuttgart"}}
}'
没有查询部分,只有一个过滤器将结果限制为斯图加特的对话。 整个筛选器将被缓存,因此,如果许多用户正在访问数据,则可以为您尤其是您的用户带来巨大的性能提升。
此外,我们已经看到可以将新节点添加到Elasticsearch中而没有太多麻烦。 如果我们需要更多的查询能力,我们可以轻松地添加更多计算机和更多副本,甚至是临时添加。 当我们确定一些可以移到搜索引擎的页面时,数据库不再需要那么多流量。
特别是为了控制巨大的峰值,最好不要再访问已读取大量页面的数据库,并从搜索引擎提供所有内容。
结论
尽管在这篇文章中我们已经研究了电子商务,但是相同的策略可以应用于不同的领域。 内容管理系统可以将社论内容推送到搜索引擎,并让其负责扩展。 分类广告,社交媒体聚合…。 所有这些都可以从搜索引擎的缓存友好特性中受益。 也许您甚至会注意到部分数据根本不需要位于数据库中,您可以将它们作为主要数据存储迁移到Elasticsearch。 迈向多语言持久性的第一步。
翻译自: https://www.javacodegeeks.com/2014/07/use-cases-for-elasticsearch-flexible-query-cache.html