阿里云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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;如降级与熔断&#…