阿里云ACP-檢索分析服務

當數據量爆炸增長,并且需要提供全文檢索功能,需要有效的數據檢索能力

  1. 用什么數據庫
  2. 怎么保證安全性
  3. 如何解決統計分析問題
  4. 如何解決單點故障
  5. 如何解決檢索難題

應對方案:

  1. 關系型數據庫:主從備份解決數據安全性問題,數據庫代理中間件進行心跳監測解決單點故障,代理中間件通過查詢語句分發到從節點進行最后匯總結果。
  2. 非關系數據庫:MongoDB備份解決數據安全性問題,節點競選機制解決單點故障問題,從配置庫檢索分片信息,將請求分發到各個節點,最后路由節點合并匯總結果
  3. 內存數據庫:數據達到PB級別,成本巨大

ElasticSearch(ES)

業內最主流的信息檢索、分析引擎,永遠開源且免費,應用場景:

  • 信息查詢(查工商信息/物流信息)
  • 日志檢索和安全分析(IT運維領域)
  • 商品搜索(條件篩選/排序)
  • 數據分析和可視化(業務數據/交易數據)
  • 訂單查詢(被集成到ERP/CRM等系統)
  • 地理位置查詢(LBS/地圖/O2O)

優點:

  • 查詢速度快
  • 對開發工程師,使用簡單,容易入門
  • 應用場景廣泛
  • Elastic Stack生態強大
  • 軟件開源免費
  • 支持云原生

ES基本概念

名詞解釋
ClusterES集群
Node節點
Shards索引分片
Replicas索引分片副本
Master元數據管理
Corrdinating處理路由請求
Data保存數據分片,負責數據相關操作

ES和Mysql的概念對比

ESMysql
index索引database數據庫
type文檔類型Table表
document文檔row行,一條記錄
field字段,組成文檔的最小單位column列
mapping映射schema模式
Get獲取數據select … from table
Put插入數據insert into table

阿里云ES簡介

基于開源ES構建的全托管云服務

  • 100% 兼容開源
  • 開箱即用,按需付費
  • 支持ES stack生態組件
  • 與Elastic官方合作提供免費X-pack商業插件
  • 一鍵部署、彈性伸縮、智能運維
  • 各類內核引擎優化
  • 遷移、容災、備份和監控等全套解決方案

成本對比
成本
能力對比
能力

實例創建

ES
開啟ES后可以修改配置
在這里插入圖片描述
在這里插入圖片描述

ES產品功能

  • 完美適配公共和混合云
    在這里插入圖片描述
    Beats采集
    Logstash收集
    ES檢索
    Ki可視化
    在這里插入圖片描述

計算存儲分離

云原生-彈性-計算存儲分離
開源ES問題:

  1. 負載不均:遷移熱點分片帶來大量數據拷貝
  2. 數據副本多副本帶來重復計算和存儲
  3. 數據搬遷節點擴縮容帶來的數據搬遷

使用28定律,分為用的多的數據和不活躍的數據
寫入增量數據之后,后臺任務會定期復制增量數據到臨時目錄,秩序臨時目錄+commit segment即可,只保存了一份,成本降低
在這里插入圖片描述

Indexing service

提供寫入托管服務,針對寫入方面的性能優化,適用于TPS高、寫入流量波動較大、搜索QPS較低的場景(低成本、彈性擴展、免運維)
架構:計算和存儲相分離的架構
架構

Open Store自研引擎:針對日志場景自研的日志存儲解決方案,能耨在日志場景中提供海量存儲服務。使用與業務上對于數據有實時更新的需求,數據沒有嚴格的冷熱區分,業務有強烈且明確的數據冷熱區分。
優勢:

  • 接近OSS的費用
  • 海量存儲(PB級別數據存儲)、按量付費,資源使用率100%
  • 零副本(默認數據容災,無需配置副本)
  • 查詢性能提升(接近云盤性能)
  • 易用
  • 海量高效存儲

其他高級特性

  • APM企業應用性能檢測,對軟件和應用程序運行狀態進行檢測、診斷和分析(APM Agent采集數據(數百個)-傳到APMServer-轉到ES-KIbana可視化,快速部署、靈活擴縮管理、低成本高性能)

  • Xpack商業特性:安全(索引和字段分權)、機器學習(數據實時監控,自預警)、監控、SQL能力(ES全文本檢索和數據統計分析,支持客戶端和RestAPI)

  • 阿里分詞:ES自帶插件,可以完成文檔分析檢索,支持CRF、結合詞典CRF、MMSEG等,有多種分詞器(standard標準、cjk中日韓文、ik_max_wordIK中文、ik_smartIK中文、aliws阿里中文分詞器)
    對比

ES遷移

遷移范圍

啥數據都能遷移數據到ES,都可以到阿里云ES
可以結束Logstash全量和增連遷移ES數據,logstash自動創建索引,但是索引可能會跟之前不一致,推薦用python腳本手動創建索引
在這里插入圖片描述
還可以通過Dataworks將Mysql數據實時同步至ES

阿里云ES DSL

發送restful請求,Kibana控制臺進入ES
ES創建索引:PUT命令
右邊代表創建twitter索引成功
在這里插入圖片描述
ES寫入文檔:Put請求指定索引名稱、類型、主鍵
在這里插入圖片描述
ES主鍵查詢:GET,可以通過ID查詢

在這里插入圖片描述
查詢語法:GET
在這里插入圖片描述
聚合查詢語法:通過aggs進行聚合
在這里插入圖片描述
修改ES文檔:PUT寫入到doc,POST發起更新
在這里插入圖片描述
刪除:DELETE
刪除
批量操作語句:/_bulk{}{}{},每個都是一對json串{操作:{}}{key:value}
有空行會報錯
bulk

ES SQL查詢
使用_xpack/sql
?format指定返回數據格式 csv/txt
xpack
添加索引別名:_alias
索引別名
配置壓縮的算法
默認EZ4,設置index.codec就行
default:EZ4
best_compression:更高壓縮比
open:打開索引
close:關閉索引
壓縮

#查詢
GET _search{} 
#看索引
GET _cat/indices?v
#創建索引
PUT /twitter?include_type_name=true
#寫入數據:向twitter索引里面寫入id為1的數據
PUT /twitter/_doc/1
#查詢id 為1 的數據
GET /twitter/_doc/1
#Lucene查詢語法:查詢user為kmichy的記錄
GET /twitter/_search?q=user.kmichy
#DSL查詢語法,match匹配
GET /twitter/_seach
#DSL查詢所有數據
GET /twitter/_search
#精準查詢query--range--post_date --{from,to}
GET /twitter/_search
{"query":{"range":{"post_date":{}}}
}
#關鍵字查詢;query---query_string--{query,default_opeartor,fields}
GET /twitter/_search
#查看索引映射字段信息
GET /twitter
#聚合統計
POST /twitter/_search?pretty
#修改數據{PUT覆蓋全部信息/POST更新操作}
PUT /twitter/_doc/3{"key":"value"}
POST /twitter/_doc/3/_update{"key":"value"}
#批量請求操作
#創建test索引
PUT /test
#查看所有索引
GET _cat/indices?v
#批量創建,不能有空格,分別為:創建id為1,刪除id為2,創建id為3,更新id為1
PUT /_bulk
{"index":{"_index":"test","_type":"doc","_id":"1"}}
{"field1":"value1"}
{"delete":{"_index":"test","_type":"_doc","_id":"2"}}
{"create":{"_index":"test","_type":"_doc","_id":"3"}}
{"field1":"value3"}
{"update":{{"_index":"test","_type":"_doc","_id":"1"}}}
{"doc":{"field1":"value1"}}#查詢test索引
GET /test/_search# SQL查詢,直接query里面執行sql
POST /_xpack/sql?format-txt
{"query":"select * from twitter"
}POST /_xpack/sql?format-txt
{"query":"show tables"
}POST /_xpack/sql?format-txt
{"query":"describe twitter"
}POST /_xpack/sql?format-txt
{"query":"select score() as score,user as name from twitter as mytable where user ='kimchy' or user='xx' limit 5"
}#創建索引,配置別名為my_index
PUT /my_index_v1
PUT /my_index_v1/_alias/my_index#查看所有別名為my_index的索引
GET /*/_alias/my_index#查看這個索引有哪些別名
GET /my_index_v1/_alias/*

阿里云ES SDK開發

ES支持通過REST API,通過JAVA,Python,Curl,C#,GO,JS,Perl,PHP,Ruby,SQL等多種開發語言客戶端,支持sql查詢數據

JAVA:發起查詢請求
SQL:在Kiba統計
創建Maven-引入elasticsearch-rest-high-level-client(比ES版本高或相等)相關依賴包,執行查詢操作。高并發場景推薦增加客戶端連接數
在這里插入圖片描述
JAVA
dependency
需要添加白名單遠程訪問ES
白名單

集群監控管理

  1. 通過DSL發送指令
  2. GUI頁面
    GUI
    高級監控報警
    主分片不能用:red
    部分分片不可用:yellow
    在這里插入圖片描述
    基礎監控
    可查看CPU、內存等資源使用情況
    在這里插入圖片描述
    Kibana查看堆棧檢測
    語句:GET /_cat/health?v ,v代表列名標示出來
    GUI:
    health

GET /_cat/nodes?v或者GUI:
nodes

GET /_cat/indices?v
indices
分析當前線程池
GET /_cat/thread_pool?v:所有線程池信息
GET /_cat/thread_pool/write?v:寫入線程池信息
GET /_cat/thread_pool/search?v:查詢線程池信息
線程池
分析熱點線程(消耗資源多的線程)
GET /_nodes/hot_threads

熱點線程
分析當前執行任務
GET _cat/tasks?v
分析當前執行任務

寫入優化

ES寫入流程:
客戶端選擇Node發送請求:為協調節點,寫入到對應Node(Primary),寫數據之后,replica副本分片同步數據
主和副本寫入完成后返回成功
Lucene引擎用于寫入數據,記錄translog日志并寫入內存,定期刷新以segment文件格式保存
ES
寫入優化
不同索引分片數的寫入耗時
寫入優化
設置合理的分片數和副本數
在這里插入圖片描述
具體代碼:

settings–index–number_of_shards/replicas
settings–refresh_interval/…
代碼
寫入優化示例
索引刷新間隔:默認1s,會有很多segment
bulk總體字節數不能太大,不然會有內存壓力
示例

查詢優化

查詢流程

  • query:廣播到所有分片,在本地搜索并匹配文檔的優先隊列,每個分片返回各自優先隊列里面文檔id和排序值給給協調節點,協調節點會把這些值合并到自己的有限隊列,產生全局排序后結果列表。
  • then
  • fetch:協調節點會辨別出哪些文檔需要被取回,并且向相關分片提交多個get請求,并返回文檔給協調節點,一旦所有節點都被取回,那么協調節點就會返回結果給客戶端,關鍵詞的查詢請求會同時從內存和磁盤的索引里面查找,主鍵磁盤優先從事務日志里面獲取文檔信息,事務日志沒有命中再從磁盤去讀取文檔信息,這樣就可以保證數據寫入后實時讀取到文檔信息。(因為寫入后首先寫的就是日志)

內存查詢性能優化 查詢優化
冷存儲
冷存儲
集群節點數對延遲的影響
查詢優化
提高查詢效率:
硬件;在一定前提下升級擴容集群。
查詢本身:filter過濾、路由強制合并只讀索引,配置協調節點,配置合適的分詞器,設置查詢讀數設置的條數和字段,配置terminate after查詢快速返回,同時避免前綴模糊匹配、避免深度翻頁,避免索引稀疏

-使用過濾器GET /twitter/_search{query--bool--filter}
在這里插入圖片描述
-使用路由:GET /my_index/_search?routing=user1 路由算法:shard_num=hash(_routing)%num_primary_shards
PUT /my_index/_doc/1?routing=user1設置路由字段
路由

  • 強制合并優化索引POST /twitter/_forcemerge?max_num_segments=1,設為1后就不需要跨網絡跨分片,小于30GB可合為一個分片
    在這里插入圖片描述
  • terminate_after提前結束搜索快速返回,到達1000(terminate_after)之后就會結束查詢
    快速返回

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

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

相關文章

【DBeaver】跨平臺數據庫連接工具DBeaver Community 23.2.5安裝配置使用

DBeaver是一款免費開源的通用數據庫管理工具和SQL客戶端,支持多種數據庫系統。它基于Java開發,具備跨平臺能力,可以在Windows、macOS和Linux系統上運行。 目錄 安裝DBeaver 連接MySQL數據庫 安裝DBeaver 進入DBeaver官網 DBeaver Communit…

【錢包】WEB3錢包APP框架的設計

【錢包】WEB3錢包APP框架的設計 一、前言 前段時間,自己做了一款WEB3錢包APP,從產品設計到框架搭建都是我一個人搞的,更多的參考了其他公司的錢包APP。 在此,想把自己的錢包經驗分享出來,幫助沒有做過錢包APP的同學開…

openGL學習(基本窗口)

學習路線 學習 OpenGL 需要掌握一系列基礎知識和技能,這些內容涵蓋了計算機圖形學的基本概念、編程語言、數學知識以及 OpenGL 的具體 API 使用。以下是學習 OpenGL 所需的主要知識點: 1. 計算機圖形學基礎 圖形學概念:了解圖形學的基本概…

無人機防護裝置技術解析

一、技術要點 1. 偵測防御系統 多頻譜復合探測 整合無線電偵測(20MHz–6GHz頻段掃描)、雷達探測、光電跟蹤(可見光/紅外/激光)技術,實現360無死角監測。例如神州明達系統可5公里內識別無人機信號,并同步…

2.2.2、CAN總線-測試模式、工作模式

目錄 1、測試模式 2、工作模式 (1) (2)SLEEP位: (3)INRQ位:(Init Request) (4)ACK:應答 (5)…

區塊鏈大講堂 | 分布式隱私計算友好的零知識證明協議

區塊鏈大講堂 主講人:上海交通大學計算機學院助理教授胡云聰 報告題目:分布式隱私計算友好的零知識證明協議 參與方式:掃描海報二維碼報名參與活動

MyBatis映射文件(XML)中參數傳遞和SQL特殊字符處理

1. 參數占位符 1.1 #{} 和 ${} 的區別 #{} 占位符 作用:安全傳參。MyBatis在執行SQL時,會把#{}替換成?,然后用參數值自動填充。 優點:可以防止SQL注入,推薦使用。 例子: select * from user wher…

C語言 數據結構 --排序 (直接插入排序,選擇排序,交換排序......)

引言:本章簡潔的講解一下數據結構中的幾個常見的排序 ,作復習之用,后面可能會補一些其他的排序 。并給出一些小編學習中遇到的坑,作借鑒。 1.直接插入排序 直接插入排序是一種簡單直觀的排序算法,其基本思想是將一個數…

華為云發布盤古大模型 5.5 新一代昇騰 AI 云服務上線

2025 年 6 月 20 日,華為開發者大會 2025(HDC 2025)在東莞召開。華為常務董事、云計算 CEO 張平安宣布基于 CloudMatrix 384 超節點的新一代昇騰 AI 云服務全面上線,并發布盤古大模型 5.5,五大基礎模型實現技術突破&am…

Reactor Handle

handle 是 Reactor 中一個非常靈活的操作符,它允許你對每個源元素進行處理,并可以選擇性地發出零個或多個元素。它既可以用于映射(map)也可以用于過濾(filter),因此可以看作是 map 和 filter 的…

C#哈希加密:原理、實現與應用

C#哈希加密:原理、實現與應用 在當今數字化時代,數據安全是每個應用程序都必須重視的問題。哈希加密作為一種重要的加密技術,在密碼存儲、數據完整性驗證、數字簽名等領域發揮著關鍵作用。本文將深入探討C#中哈希加密的原理、常用算法以及實…

httpbin.org是什么,有什么作用

httpbin.org 是一個開源的 HTTP 請求與響應測試服務,基于 Python 的 Flask 框架開發 它允許開發者發送各種 HTTP 請求,并返回請求的詳細信息,便于調試和驗證 HTTP 客戶端的行為。以下是其核心功能和作用詳解: 一、核心功能與作用…

mongodb生產備份工具PBM

如果你的 MongoDB 數據量特別大(例如幾十 GB、TB 級別),普通的 mongodump/mongorestore 會顯得緩慢且資源消耗大,不適合生產級別大數據集。下面是當前 MongoDB 社區和企業廣泛使用的幾種備份方案對比和推薦: 工具是否…

【LeetCode#第167題】兩數之和Ⅱ

給你一個下標從 1 開始的整數數組 numbers &#xff0c;該數組已按 非遞減順序排列 &#xff0c;請你從數組中找出滿足相加之和等于目標數 target 的兩個數。如果設這兩個數分別是 numbers[index1] 和 numbers[index2] &#xff0c;則 1 < index1 < index2 < numbers…

Python(一)實現一個爬取微信小程序數據的爬蟲+工程化初步實踐

文章目錄 前言用Charles 抓包 iOS 微信小程序在Mac端和iOS端安裝Charles 自簽名證書Mac端iOS端 能抓到Safari瀏覽器的包但是抓不到微信小程序的包直接在iOS 上抓包的App如何抓取Android 7.0 以上/Harmony OS微信小程序包 Python 項目工程化pip 切換為國內鏡像源工程化參考腳手架…

uview ui request get / post 傳參含params和json數據的分析和使用

背景。單獨寫了controller方法去配合移動端的接口調用。但有的接口與pc端類似。于是進行了復用。但接口得復制不是。 uview js request 文檔 注意迪三個參數是header 后端接口GET方法 調用代碼截圖 瀏覽器調試 總結。 復制之前的api接口。為了方便復用底層實現。接口類型…

用 pnpm + TurboRepo,構建多項目高效開發體系

在現代前端項目日益復雜的今天&#xff0c;我們越來越多地面對一個場景&#xff1a;多個項目共享邏輯、組件和依賴&#xff0c;而維護和構建效率卻在不斷拉垮。這種情況下&#xff0c;傳統項目結構的痛點就顯現無遺。 從我親身實踐來看&#xff0c;選擇 pnpm TurboRepo 構建 …

Pytest 使用命令行參數執行指定環境的腳本—— Python 實踐

&#x1f9fe; 一、項目背景 在自動化測試中&#xff0c;我們經常需要根據不同的運行環境&#xff08;如測試環境和生產環境&#xff09;來執行測試腳本。本文將詳細介紹如何通過命令行參數來指定運行環境&#xff0c;并使用 Python 和 pytest 框架實現這一功能。 &#x1f6e…

利用可控驗證碼位數實現拒絕服務攻擊(DoS)風險與線程模型分析

一、背景介紹&#xff1a;驗證碼接口中的潛在 DoS 漏洞 在滲透測試過程中&#xff0c;常見驗證碼接口支持傳入“驗證碼位數”參數&#xff0c;表面看是業務可配置&#xff0c;實則若未做上限控制&#xff0c;極易成為資源消耗型 DoS 攻擊入口。 &#x1f9ea; 測試場景&#…

Spring Cloud Feign 整合 Sentinel 實現服務降級與熔斷保護

Spring Cloud Feign 整合 Sentinel 實現服務降級與熔斷保護 在微服務架構中&#xff0c;服務之間的調用往往依賴 Feign&#xff0c;而服務調用的穩定性又至關重要。本文將介紹如何將 Feign 與 Sentinel 結合使用&#xff0c;實現服務的容錯保護&#xff08;如降級與熔斷&#…