es 3期 第18節-分頁查詢使用避坑的一些事

#### 1.Elasticsearch是數據庫,不是普通的Java應用程序,傳統數據庫需要的硬件資源同樣需要,提升性能最有效的就是升級硬件。
#### 2.Elasticsearch是文檔型數據庫,不是關系型數據庫,不具備嚴格的ACID事務特性,任何企圖直接替代嚴格事務性場景的應用項目都會失敗!!!

##### 索引字段與屬性都屬于靜態設置,若后期變更歷史數據需要重建索引才可生效
##### 對歷史數據無效!!!!
##### 一定要重建索引!!!!

### 1、分頁查詢原理概要

## 分頁查詢需求
# 分頁需求海量數據:動輒數據量千萬級別、億級別,無法在一頁內展示
# 數據排序:查詢數據需要排序,按順序展示

## 分頁查詢過程
# 按條件掃描數據
# 按條件排列數據
# 取回數據

## ES分片查詢階段
# ES是分布式的,相比傳統數據庫多了分片機制,查詢一次,要查詢多個分片;
# 分頁查詢相比傳統數據庫增加了復雜度。

## ES分片合并階段
# 服務端協調節點從各分片取回數據ID按照條件排序合并得到最終的數據ID列表

## 分頁查詢問題
# 分頁查詢大小,決定了查詢的響應
# 分頁查詢深度,決定了查詢的效率
# 分頁查詢體驗,決定了魚與熊掌兼得

## 查詢便利
# 查詢優點
# 查詢數據時,可同時返回數據量總條數與分頁的明細數據;避免了傳統數據庫查詢2次的問題,大大提升了查詢效率

## 數據準備

POST _reindex
{"source": {"index": "kibana_sample_data_logs"},"dest": {"index": "kibana_sample_data_logs_page"}
}

## From Size查詢
# 起始頁查詢介紹
# from:設定起始數據位置
# size:設定單頁數據量大小

GET kibana_sample_data_logs_page/_search
{"track_total_hits":true,"from":10,"size":20
}

## 查詢限制
# 查詢窗口大小限制
# From+size<=10000,默認不能超過此值,es的安全限制,會報錯
# Window=10000,重排序窗口不能超過此值
# 查詢超過10000的語句,報錯

GET kibana_sample_data_logs_page/_search
{"track_total_hits":true,"from":10000,"size":20
}

## 但是實際場景中還是會有深分頁需求,可以通過修改配置實現
# 修改索引配置

PUT kibana_sample_data_logs_page/_settings
{"index":{"max_result_window":20000}
}

# 再次查詢,不報錯了

GET kibana_sample_data_logs_page/_search
{"track_total_hits":true,"from":10000,"size":20
}

## 單頁大小設置
# 單頁大小
# Size設置多大合適,不同的大小性能不一
# _source控制在1kb以內
# 每次查詢返回數據控制在1M以內
# 盡量不要深分頁和大頁數
# 分片數也不要過多,請求會分發到所有分片在做聚合

### 3、Search After查詢實戰
## 參照點分頁查詢
# 概念介紹
# Search after,基于排序字段,查詢下一頁,基于上一頁最后一條數據的排序字段值,作為參照可以保證數據查詢量大大減少
## 注意事項
# 1.分頁會導致數據跳躍
# 2.數據新增或者變更refresh造成錯誤

# 查詢根據timestamp 倒序,使用的數據離散度要高,否則容易跳頁

GET kibana_sample_data_logs_page/_search
{"track_total_hits":true,"from":0,"size":20,"query":{"match_all": {}},"sort":{"timestamp":{"order":"desc"}}
}

# 跳過第一條數據的sort值,原第二條數據變成了現在的第一條

GET kibana_sample_data_logs_page/_search
{"track_total_hits":true,"from":0,"size":20,"query":{"match_all": {}},"sort":{"timestamp":{"order":"desc"}},// 跳過第一條數據的sort值"search_after":["1721339126749"]
}

# 查詢數據離散度低的排序跳頁

GET kibana_sample_data_logs_page/_search
{"track_total_hits":true,"from":0,"size":20,"query":{"term": {"response": {"value": "200"}}}
}

# 跳過200沒有數據了

GET kibana_sample_data_logs_page/_search
{"track_total_hits":true,"from":0,"size":20,"query":{"match_all": {}},"sort":[{"response":{"order":"desc"}}],// 跳過第一條數據的sort值"search_after":["200"]
}

# 可以使用多個字段排序,方式跳頁

GET kibana_sample_data_logs_page/_search
{"track_total_hits":true,"from":0,"size":20,"query":{"match_all": {}},"sort":[{"response":{"order":"desc"}},{"timestamp":{"order":"desc"}}],// 跳過第一條數據的sort值"search_after":["200","1721339126749"]
}

## search_after 與 from 一起使用會報錯,不支持

GET kibana_sample_data_logs_page/_search
{"track_total_hits":true,"from":10,"size":20,"query":{"match_all": {}},"sort":[{"response":{"order":"desc"}}],// 跳過第一條數據的sort值"search_after":["200"]
}

### 4、Point in time查詢實戰
## Point in time查詢
# 概念介紹
# Search after,基于排序字段,查詢下一頁,基于上一頁最后一條數據的排序字段值,作為參照,可以保證數據查詢量大大減少
# 注意事項
# 1.分頁會導致數據跳躍
# 2.數據新增或者變更refresh造成錯誤

# 業務上數據是在不停的新增的,找不到原來的數據,這里相當于一個快照
# 生成分鐘的快照

POST kibana_sample_data_logs_page/_pit?keep_alive=1m

# 使用pit id查詢,不能顯示的指定索引名稱,因為pit中帶了索引信息

GET _search
{"track_total_hits":true,"from":10,"size":20,"query":{"match_all": {}},"pit":{"id": "i_vrAwEca2liYW5hX3NhbXBsZV9kYXRhX2xvZ3NfcGFnZRZ0MnRXYnZrc1RacWdoUjJBWFdpazJ3ABZDZnVtY0x0QlI0Ry13VUNoZ3BwOU53AAAAAAAABazOFkNtYjBkU0E5VGF5Q3hBOFJuMHh6QVEAARZ0MnRXYnZrc1RacWdoUjJBWFdpazJ3AAA="},"sort":[{"timestamp":{"order":"desc"}}]
}

### 5、Search Scroll 查詢實戰
## scroll快照查詢
# 概念解釋
# 快照查詢基于緩存機制,將查詢的所有數據ID緩存起來,下次查詢,從緩存中直接找尋,避免重復執行查詢,是目前業界做深度查詢最佳的方式;
# 注意事項
# 局限性也明顯,實時性支持弱;
# 不支持修改頁數,不支持跳頁
# 占用內存,使用完要清理掉

# 查詢條件,并生成1分鐘的快照
# 同時預設查詢條數和條件

POST kibana_sample_data_logs_page/_search?scroll=1m
{"track_total_hits":true,// 預設每次查100條"size":100,// 預設查詢條件"query":{"term": {"response": {"value": "503"}}}
}

# 使用scroll id查詢,不能顯示的指定索引名稱,因為scroll id中帶了索引信息和條件
# 數據一共有441條,查詢5次就沒結果了

GET _search/scroll
{"scroll_id":"FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFkNtYjBkU0E5VGF5Q3hBOFJuMHh6QVEAAAAAAAY4TRZDZnVtY0x0QlI0Ry13VUNoZ3BwOU53","scroll":"1m"
}

### 6、分頁查詢建議與經驗分享
# 技術盡量滿足業務需求
# 技術不能無限制滿足業務
# 平衡業務與技術
# 深度翻頁真的需要這么多嗎?有十萬條數據的時候,真是場景下用戶不會每頁100條翻到最后一頁
# 分頁性能問題?from和size,size大了性能就不會高,數據量大了從es取出來快,但是帶寬不行

??
# 查詢DSL語法
# https://www.elastic.co/guide/en/elasticsearch/reference/7.11/search-search.html
# 分?查詢
# https://www.elastic.co/guide/en/elasticsearch/reference/7.11/paginate-search-results.html
# scroll-api
# https://www.elastic.co/guide/en/elasticsearch/reference/7.11/scroll-api.html
# point-in-time-api
# https://www.elastic.co/guide/en/elasticsearch/reference/7.11/point-in-time-api.html
# # time-units 時間參數
# https://www.elastic.co/guide/en/elasticsearch/reference/7.11/common-options.html#time-units

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63929.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63929.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63929.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32串口第一次接收數據時第一個字節丟失的問題

解決方法&#xff1a;開啟中斷之前&#xff0c;先清除標志位【1】。 串口清除標志位&#xff1a; __HAL_UART_CLEAR_PEFLAG(&huart1); HAL_UART_Receive_IT(&huart1,&RxUart, 1); 定時器清除標志位&#xff1a; __HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);…

深度學習中的殘差網絡、加權殘差連接(WRC)與跨階段部分連接(CSP)詳解

隨著深度學習技術的不斷發展&#xff0c;神經網絡架構變得越來越復雜&#xff0c;而這些復雜網絡在訓練時常常遇到梯度消失、梯度爆炸以及計算效率低等問題。為了克服這些問題&#xff0c;研究者們提出了多種網絡架構&#xff0c;包括 殘差網絡&#xff08;ResNet&#xff09;、…

Pytorch | 從零構建EfficientNet對CIFAR10進行分類

Pytorch | 從零構建EfficientNet對CIFAR10進行分類 CIFAR10數據集EfficientNet設計理念網絡結構性能特點應用領域發展和改進 EfficientNet結構代碼詳解結構代碼代碼詳解MBConv 類初始化方法前向傳播 forward 方法 EfficientNet 類初始化方法前向傳播 forward 方法 訓練過程和測…

Vue 2 中實現雙擊事件的幾種方法

在 Vue 2 中處理用戶交互&#xff0c;特別是雙擊事件&#xff0c;是一個常見的需求。Vue 提供了一種簡潔的方式來綁定事件&#xff0c;包括雙擊事件。本文將介紹幾種在 Vue 2 中實現雙擊事件的方法。 1. 使用 dblclick 指令 Vue 允許你直接在模板中使用 dblclick 指令來監聽雙…

音視頻入門基礎:MPEG2-TS專題(20)——ES流簡介

《T-REC-H.222.0-202106-S!!PDF-E.pdf》第27頁對ES進行了定義。ES流是PES packets&#xff08;PES包&#xff09;中編碼的視頻、編碼的音頻或其他編碼的比特流。一個ES流&#xff08;elementary stream&#xff09;在具有且只有一個stream_id的PES packets序列中攜帶&#xff1…

天水月亮圈圈:舌尖上的歷史與傳承

在天水甘谷縣&#xff0c;有一種美食如同夜空中的明月&#xff0c;散發著獨特的魅力&#xff0c;它就是有著百年歷史的月亮圈圈。月亮圈圈原名甘谷酥圈圈&#xff0c;據傳&#xff0c;由大像山鎮蔣家莊一姓李的廚師創制而成&#xff0c;后經王明玖等廚師的光大傳承&#xff0c;…

YOLOv11融合[CVPR2023]FFTformer中的FSAS模塊

YOLOv11v10v8使用教程&#xff1a; YOLOv11入門到入土使用教程 YOLOv11改進匯總貼&#xff1a;YOLOv11及自研模型更新匯總 《Efficient Frequency Domain-based Transformers for High-Quality Image Deblurring》 一、 模塊介紹 論文鏈接&#xff1a;https://arxiv.org/abs…

java如何使用poi-tl在word模板里渲染多張圖片

1、poi-tl官網地址 http://deepoove.com/poi-tl/ 2、引入poi-tl的依賴 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version></dependency>3、定義word模板 釋義&#xf…

《信管通低代碼信息管理系統開發平臺》Windows環境安裝說明

1 簡介 《信管通低代碼信息管理系統應用平臺》提供多環境軟件產品開發服務&#xff0c;包括單機、局域網和互聯網。我們專注于適用國產硬件和操作系統應用軟件開發應用。為事業單位和企業提供行業軟件定制開發&#xff0c;滿足其獨特需求。無論是簡單的應用還是復雜的系統&…

8K+Red+Raw+ProRes422分享5個影視級視頻素材網站

Hello&#xff0c;大家好&#xff0c;我是后期圈&#xff01; 在視頻創作中&#xff0c;電影級的視頻素材能夠為作品增添專業質感&#xff0c;讓畫面更具沖擊力。無論是廣告、電影短片&#xff0c;還是品牌宣傳&#xff0c;高質量的視頻素材都是不可或缺的資源。然而&#xff…

Git遠程倉庫的使用

一.遠程倉庫注冊 1.github&#xff1a;GitHub Build and ship software on a single, collaborative platform GitHub 2.gitee&#xff1a;GitHub Build and ship software on a single, collaborative platform GitHub github需要使用魔法&#xff0c;而gitee是國內的倉…

Echarts連接數據庫,實時繪制圖表詳解

文章目錄 Echarts連接數據庫&#xff0c;實時繪制圖表詳解一、引言二、步驟一&#xff1a;環境準備與數據庫連接1、環境搭建2、數據庫連接 三、步驟二&#xff1a;數據獲取與處理1、查詢數據庫2、數據處理 四、步驟三&#xff1a;ECharts圖表配置與渲染1、配置ECharts選項2、動…

MongoDB 常用操作指南(Docker 環境下)

本文詳細介紹如何在 Docker 中操作 MongoDB&#xff0c;包括如何進入命令行、進行用戶認證、查看數據庫和集合&#xff0c;以及常用的索引操作和其他高頻使用的 MongoDB 方法。小白也能輕松上手 1. 在 Docker 中進入 MongoDB 命令行 進入運行 MongoDB 容器的命令行&#xff1a;…

【Java基礎面試題038】棧和隊列在Java中的區別是什么?

回答重點 棧&#xff08;Stack&#xff09;&#xff1a;遵循后進先出&#xff08;LIFO&#xff0c;Last In&#xff0c;First Out&#xff09;原則。即&#xff0c;最后插入的元素最先被移除。主要操作包括push&#xff08;入棧&#xff09;和pop&#xff08;出棧&#xff09;…

idea2024創建JavaWeb項目以及配置Tomcat詳解

今天呢&#xff0c;博主的學習進度也是步入了JavaWeb&#xff0c;目前正在逐步楊帆旗航&#xff0c;迎接全新的狂潮海浪。 那么接下來就給大家出一期有關JavaWeb的配置教學&#xff0c;希望能對大家有所幫助&#xff0c;也特別歡迎大家指點不足之處&#xff0c;小生很樂意接受正…

由于這些關鍵原因,我總是手邊有一臺虛擬機

概括 虛擬機提供了一個安全的環境來測試有風險的設置或軟件,而不會影響您的主系統。設置和保存虛擬機非常簡單,無需更改主要設備即可方便地訪問多個操作系統。運行虛擬機可能會占用大量資源,但現代 PC 可以很好地處理它,為實驗和工作流程優化提供無限的可能性。如果您喜歡使…

【FPGA】ISE13.4操作手冊,新建工程示例

關注作者了解更多 我的其他CSDN專欄 求職面試 大學英語 過程控制系統 工程測試技術 虛擬儀器技術 可編程控制器 工業現場總線 數字圖像處理 智能控制 傳感器技術 嵌入式系統 復變函數與積分變換 單片機原理 線性代數 大學物理 熱工與工程流體力學 數字信號處…

python環境中阻止相關庫的自動更新

找到conda中的Python虛擬環境位置 這里以conda中的pytorch虛擬環境為例&#xff08;Python環境位置&#xff09;&#xff0c;在.conda下的envs中進入pytorch下的conda-meta路徑下 新建一個空白的pinned文檔 右鍵點擊桌面或文件資源管理器中的空白處&#xff0c;選擇“新建” …

重溫設計模式--外觀模式

文章目錄 外觀模式&#xff08;Facade Pattern&#xff09;概述定義 外觀模式UML圖作用 外觀模式的結構C 代碼示例1C代碼示例2總結 外觀模式&#xff08;Facade Pattern&#xff09;概述 定義 外觀模式是一種結構型設計模式&#xff0c;它為子系統中的一組接口提供了一個統一…

uniapp 微信小程序 頁面部分截圖實現

uniapp 微信小程序 頁面部分截圖實現 ? 原理都是將頁面元素畫成canvas 然后將canvas轉化為圖片&#xff0c;問題是我頁面里邊本來就有一個canvas&#xff0c;ucharts圖畫的canvas我無法畫出這塊。 ? 想了一晚上&#xff0c;既然canvas最后能轉化為圖片&#xff0c;那我直接…