zoukankan      html  css  js  c++  java
  • (50)ElasticSearch之分页查询中的deep paging问题

      请看下面两种分页查询的示例:from是从第几个文档开始查询,size是查几个文档

    GET /lib/user/_search?from=0&size=3
    GET /lib/user/_search
    {
      "from":0,
      "size":2,
      "query":{
        "terms":{
          "interests":["hejiu","changge"]
         }
       }
    }

      1、什么是deep paging

      查询的很深,比如一个索引有三个primary shard,存储了6000条数据,每个shard 2000条,要得到第100页的数据(每页10条),类似这种情况就叫deep paging

      2、如何得到第100页的10条数据

      1)错误的理解

      查询到的是从每个shard的(100-1)*10的下标开始的,即查询的范围是990-999。在每个shard中搜索990到999这10条数据,然后用这30条数据排序,排序之后取10条数据就是要搜索的数据,这种做法是错的,因为3个shard中的数据的_score分数不一样,可能这某一个shard中第一条数据的_score分数比另一个shard中第1000条都要高,所以在每个shard中搜索990到999这10个数据然后排序的做法是不正确的。

      2)正确的理解

      每个shard把0-999(每个shard的前100页的数据,每个shard取前1000条)条数据全部搜索出来(按排序顺序),然后全部返回给coordinate node,由coordinate node按_score分数排序后,取出第100页的10条数据,然后返回给客户端。

      3、deep paging 性能问题

      1)耗费网络带宽,因为搜索过深的话,各shard要把数据传送给coordinate node,这个过程是有大量数据传递的,消耗网络。

      2)消耗内存,各shard要把数据传送给coordinate node,这个传递回来的数据,是被coordinate node保存在内存中的,这样会大量消耗内存。

      3)消耗cpu,coordinate node要把传回来的数据进行排序,这个排序过程很消费cpu。

      鉴于deep paging的性能问题,所以应尽量减少使用。

  • 相关阅读:
    word设置的密码忘了怎么办?
    Navicat Report Viewer 设置 HTTP 的方法
    如何处理Navicat Report Viewer 报表
    excel密码忘记了怎么办
    Beyond Compare文本比较搜索功能详解
    Popular Cows POJ
    Problem B. Harvest of Apples HDU
    网络流模型整理
    The Shortest Statement CodeForces
    Vasya and Multisets CodeForces
  • 原文地址:https://www.cnblogs.com/javasl/p/12655937.html
Copyright © 2011-2022 走看看