Elasticsearch分頁查詢數(shù)據(jù)大小受窗口限制問題

1.背景

??????12月9日,PIS針對地震多報問題,做了一次緊急需求迭代隘竭,然而在上線驗證過程中,測試同學使用多臺手機接收app push定踱,卻并沒有按照預期全部接收到地震預警。排查日志恃鞋,發(fā)現(xiàn)如下報錯:

image.png

??????該報警是在分頁查詢ES中查詢滿足push條件的用戶時崖媚,由ES報錯觸發(fā)的。從報警信息中不難看出恤浪,ES中有對分頁大小限制的“閾值”至扰,恰好某次分頁查詢超出了這個“閾值”,導致報錯资锰。

2.原因

帶著這個疑問,查閱相關(guān)資料:

elasticsearch深度分頁問題: https://www.cnblogs.com/hello-shf/p/11543453.html

es 默認采用的分頁方式是 from+ size 的形式阶祭,在深度分頁的情況下绷杜,這種使用方式效率是非常低的:

ElasticSearch在分布式系統(tǒng)中的深度分頁

???????理解為什么深度分頁是有問題的,我們可以假設(shè)在一個有 4 個主分片的索引中搜索濒募。 當我們請求結(jié)果的第一頁(結(jié)果從 1 到 10 )鞭盟,每一個分片產(chǎn)生前 10 的結(jié)果,并且返回給 協(xié)調(diào)節(jié)點 瑰剃,協(xié)調(diào)節(jié)點對 40 個結(jié)果排序得到全部結(jié)果的前 10 個齿诉。

??????現(xiàn)在假設(shè)我們請求第 990 頁--結(jié)果從 990 到 1000 。所有都以相同的方式工作除了每個分片不得不產(chǎn)生前1000個結(jié)果以外晌姚。 然后協(xié)調(diào)節(jié)點對全部 4000 個結(jié)果排序最后丟棄掉這些結(jié)果中的 3990 個結(jié)果粤剧。

??????可以看到,在分布式系統(tǒng)中挥唠,對結(jié)果排序的成本隨分頁的深度成指數(shù)上升抵恋。這就是 web 搜索引擎對任何查詢都不要返回超過 10000 個結(jié)果的原因。

[圖片上傳中...(image-3fed2-1585304297229-0)]

??????很顯然宝磨,這次ES報錯弧关,也是由于當前的分頁窗口查詢到第5000條及以后的數(shù)據(jù)時盅安,數(shù)據(jù)大小超出了5000這個系統(tǒng)參數(shù)配置,導致報錯并觸發(fā)app push失敗世囊。

??????事實也的確是這樣的别瞭,本次觸發(fā)報錯的模擬地震數(shù)據(jù)如下:

震中位置 經(jīng)度:114.72 維度:41.15
預警等級:4.8
震源深度:8
影響用戶:51770(條件:烈度大于1)

??????由于影響用戶已經(jīng)超出了50000,并且max_result_window這個參數(shù)配置為50000株憾,當分頁查詢50000條之后的數(shù)據(jù)時蝙寨,ES拋出異常。最直接的影響就是号胚,按照目前的配置籽慢,最多能為50000用戶發(fā)送push...

{
  "index": {
    "max_result_window": 50000  }
}

3.解決辦法

??????很顯然,單純的調(diào)大 max_result_window這個參數(shù)并不滿足系統(tǒng)的可擴展猫胁,可維護性箱亿,因為誰也不能保證一次真實的地震影響的用戶數(shù)量是否在這個范圍之內(nèi)。

??????ES提供了Search After這種查詢方式弃秆,有效的解決了上面的問題:

Search After

??????實時獲取下一頁文檔信息

  • 不支持指定頁數(shù)
  • 只能往下翻

??????假設(shè)Size 10,當查詢990-1000届惋,它通過唯一排序值定位,將每次要處理的文檔數(shù)都控制在10菠赚。

image.png

??????search_after 是一種假分頁方式脑豹,根據(jù)上一頁的最后一條數(shù)據(jù)來確定下一頁的位置,同時在分頁請求的過程中衡查,如果有索引數(shù)據(jù)的增刪改查瘩欺,這些變更也會實時的反映到游標上。為了找到每一頁最后一條數(shù)據(jù)拌牲,每個文檔必須有一個全局唯一值俱饿,官方推薦使用 _uid 作為全局唯一值,但是只要能表示其唯一性就可以塌忽。

4.其他

??????還有一種scrll方式拍埠,但是使用的是數(shù)據(jù)快照,不能滿足實時查詢的需求土居,這里不做討論枣购。

分頁方式對比

分頁方式 性能 優(yōu)點 缺點 場景
from + size 靈活性好,實現(xiàn)簡單 深度分頁問題 數(shù)據(jù)量比較小擦耀,能容忍深度分頁問題
scroll 解決了深度分頁問題 無法反應(yīng)數(shù)據(jù)的實時性(快照版本)維護成本高棉圈,需要維護一個 scroll_id, 海量數(shù)據(jù)的導出,需要查詢海量結(jié)果集的數(shù)據(jù)
search_after 性能最好不存在深度分頁問題能夠反映數(shù)據(jù)的實時變更 實現(xiàn)復雜眷蜓,需要有一個全局唯一的字段連續(xù)分頁的實現(xiàn)會比較復雜迄损,因為每一次查詢都需要上次查詢的結(jié)果 海量數(shù)據(jù)的分頁
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市账磺,隨后出現(xiàn)的幾起案子芹敌,更是在濱河造成了極大的恐慌痊远,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氏捞,死亡現(xiàn)場離奇詭異碧聪,居然都是意外死亡,警方通過查閱死者的電腦和手機液茎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門逞姿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捆等,你說我怎么就攤上這事滞造。” “怎么了栋烤?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵谒养,是天一觀的道長。 經(jīng)常有香客問我明郭,道長买窟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任薯定,我火速辦了婚禮始绍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘话侄。我一直安慰自己亏推,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布年堆。 她就那樣靜靜地躺著径簿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘀韧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天缠捌,我揣著相機與錄音锄贷,去河邊找鬼。 笑死曼月,一個胖子當著我的面吹牛谊却,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哑芹,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼炎辨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了聪姿?” 一聲冷哼從身側(cè)響起碴萧,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤乙嘀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后破喻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虎谢,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年曹质,在試婚紗的時候發(fā)現(xiàn)自己被綠了婴噩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡羽德,死狀恐怖几莽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宅静,我是刑警寧澤章蚣,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站坏为,受9級特大地震影響究驴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匀伏,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一洒忧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧够颠,春花似錦熙侍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剃诅,卻和暖如春巷送,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矛辕。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工笑跛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人聊品。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓飞蹂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翻屈。 傳聞我的和親對象是個殘疾皇子陈哑,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • 1:from + size 淺分頁 "淺"分頁是最簡單的分頁方案。es會根據(jù)查詢條件在每一個DataNode分片中...
    浩楠Chen閱讀 1,449評論 0 1
  • 一:自律 自由職業(yè)者不受任何外力的約束刽宪,是過著自己安排的生活。如果想成為自由職業(yè)者爬坑,要學會自律纠屋,不能有“明日復明日...
    行者小鶴閱讀 238評論 0 1
  • 一:持續(xù)提升學習能力的三個技巧 1.1反思、以教為學盾计、刻意練習更像是提升學習能力的“理論”售担,而記錄、定期回顧與付費...
    楊秀兵閱讀 181評論 0 0
  • EPISODE 11 人生多是無奈·再入EASTEL 清晨署辉,總統(tǒng)套房內(nèi)族铆,大廚和服務(wù)生已在移動料理臺上制作豐盛的早餐...
    紫上薰閱讀 672評論 0 48
  • 1、在這節(jié)課最重要印象最深刻的三個部分/知識點哭尝? (1)小組講課 (2)看視頻 (3)老師講課 2哥攘、為什么這三個點...
    MY馬悅閱讀 121評論 0 0