【问题标题】:How to Fetch Count Based on Filter through Back-end如何通过后端基于过滤器获取计数
【发布时间】:2020-10-11 03:50:45
【问题描述】:

假设我们有一个相当大的产品数据库,例如50 K 手机。我们将这些数据存储在 Elastic Search 中。现在我有一个手机产品列表页面,我使用分页功能一次列出所有手机 10 及其基本详细信息。该页面还有一个过滤器部分,如品牌、价格范围、RAM、平均。评级、发布日期和更多规格。

现在,当我获取三星公司的移动设备和 6 GB 内存时,我触发了一个弹性查询并获得了结果及其总数。所以这里带来了count查询变得复杂,Total count依赖于filter,这种查询增加了系统的负载。

我想要一个系统,它会计算一次过滤器的计数并将其保存在某处,因此我不需要再次计算同一过滤器的计数,从而一次又一次地减少相同过滤器的复杂性开销。让我知道您的知识如何解决这个问题或我应该如何维护我的系统?

任何参考或文章也将不胜感激。

【问题讨论】:

    标签: mysql elasticsearch memcached backend system-design


    【解决方案1】:

    我们能否添加一个缓存层并缓存最常用的过滤器计数。并在库存更新时增加和减少计数。这样我们就可以避免计算。这在弹性搜索的情况下是不可能的,因为它会在更新库存时使缓存失效。这样我们就可以避免对 elasticsearch 的过多点击。

    【讨论】:

      【解决方案2】:

      弹性搜索提供自己的缓存技术,您可以使用这些设置来缓存特定查询

      GET /my_index/_search?request_cache=true
      {
        "size": 0,
        "aggs": {
          "popular_colors": {
            "terms": {
              "field": "colors"
            }
          }
        }
      }
      

      这里是更多详细信息的链接。 请注意,您有这么多用于缓存弹性搜索的硬件配置。 https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-request-cache.html#_enabling_and_disabling_caching_per_request.

      另外,如果你有多个数据节点,并且查询和聚合频繁的索引很少,并且不同节点的硬件配置不同,那么你应该研究一下elasticsearch冷热节点的概念,并将您的 imp 索引放在热节点中,而不是缓存所有内容

      https://www.elastic.co/blog/hot-warm-architecture-in-elasticsearch-5-x

      https://www.elastic.co/blog/implementing-hot-warm-cold-in-elasticsearch-with-index-lifecycle-management

      【讨论】:

        【解决方案3】:

        您能否用您正在使用的复杂计数查询示例更新上面的帖子?确定您面临的问题会很有帮助。 谢谢!

        【讨论】:

        • 想像一个简单的计数查询,但它在大型数据库(如 50 K 手机数据集)上运行。因此,我想为众多过滤器组合缓存或预先计算这些计数查询数据。
        • elasticsearch 中的 50K 文档是一个平均大小但不是很大的数据集。您是否在单个索引上运行查询?
        • 假设我已经将数据分片到multiplse索引中,此刻我的应用程序遇到10K请求,现在计算每个10K请求的计数非常昂贵,我的CPU消耗迅速增加,我该如何减少这种计算具有可扩展解决方案的过滤器的复杂性。
        • 在实施第 3 方缓存机制之前获得最佳性能。请看一下 Elasticsearch 缓存功能,因为它既经济又能提高您的性能。尽量在应用程序和弹性搜索之间保持最少数量的组件。此外,elasticsearch 本身现在也有了很大的改进,许多大型组织正在使用它来进行实时查询搜索。您可以查看这些帖子和文档:字段数据缓存:elastic.co/guide/en/elasticsearch/reference/current/…
        • 分片请求缓存:elastic.co/guide/en/elasticsearch/reference/current/… 节点查询缓存:elastic.co/guide/en/elasticsearch/reference/6.8/… 此外,您需要使用 jmeter 或类似工具运行性能测试,以确定这些机制中的任何一个是否正在提高性能。您还可以阅读 Ebay 遵循的做法:tech.ebayinc.com/engineering/…
        猜你喜欢
        • 2017-09-08
        • 2020-09-19
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-10
        • 2021-03-17
        相关资源
        最近更新 更多