【数据库】elasticsearch
1、架构

es会为每个索引创建一定数量的主分片和副本分片。
分片(Shard):
将索引数据分割成多个部分,每个部分都是一个独立的索引。
主要目的是实现数据的分布式存储和并行处理,从而提高系统的扩展性和性能。
在创建索引时,可以指定主分片的数量,一旦索引创建完成,主分片的数量就不能再更改。每个主分片负责存储索引数据的一部分,并可以独立地处理搜索请求。
副本(Replica):
副本是主分片的完全复制,用于提供数据的冗余备份,增强数据的可用性和容错能力。
每个主分片可以有零个或多个副本分片。
副本分片与主分片分布在不同的节点上,当主分片所在的节点出现故障时,副本分片可以接管主分片的工作,确保服务的连续性。
此外,副本分片还可以用于提高搜索性能,因为搜索请求可以并行地在多个副本分片上执行。
此外,副本分片还可以用于提高搜索性能,因为搜索请求可以并行地在多个副本分片上执行。
2、存储
数据按照mapping序列化为json存储
倒排索引:相反于k-v结构,它从词(value)出发,记载了这个词在哪些文档中出现过
3、基本概念
mapping:相当于数据库定义、字段定义
index索引:相当于数据库
type类型:数据类型
document文档:一条数据
field:一个字段
shard:分片,多节点存储
replia:副本,用于故障恢复
分析器:预设分析器、自定义分析器
4、字段类型
keyword(关键词类型):用于精确匹配,不会分词,es直接根据keyword构建倒排索引,一般与term结合使用
text(文本类型):用于全文搜索,会被分词器处理,生成多个词条,支持模糊匹配
Numeric(数值类型):integer/long/short/byte/double/float
Date(日期类型):用于存储日期和时间数据,支持范围查询、日期格式化和日期计算等
Boolean(布尔类型)
Object(对象类型):用于存储复杂结构的数据,可以嵌套其他字段。
Nested(嵌套类型):用于存储对象数组,允许对数组中的每个对象进行独立的搜索。
IP:用于存储IPv4或IPv6地址,不会分词
5、查询方式
term精确查询:效率高,不会分词
match匹配查询:会分词,适用于text类型的字段
phrase短语查询:会分词,要求这些分词在文档中的顺序和间隔与查询短语一致,适用于保持短语顺序的搜索
wildcard通配符模糊查询:*?,性能低于phrase
fuzzy拼写错误模糊查询
prefix前缀查询
range范围查询
bool查询
nested嵌套查询:性能低于精确查询
6、搜索过程
query:定位到位置,但不取
请求打到每个shard,每个shard在本地搜索,并返回一个优先队列,包含docId, 打分值
返回队列数据给协调节点
协调节点进行数据合并、排序、分页
fetch:取数据
协调节点根据query结果,去各分片上查询docId的实际document内容,返回
7、索引优化
查询方面:
禁用wildcard通配符查询:会扫描大量文档,用高性能的term或phrase代替
对需要分词的字段,合理的设置分词器:中文分词,大小写等
充分利用倒排索引机制:对于需要精确匹配的字段,尽量用keyword(text会被分词器处理,适用于全文搜索)
减少动态索引:索引如果是基于时间动态生成,会越来越多
存储与部署:
冷热分离:热数据(如最近一周的数据),其余为冷数据。 对于冷数据不会再写入新数据
增加sharding
8、更新和删除过程
删除和更新都是写操作,但是Elasticsearch中的文档是不可变的,因此不能被删除或者改动以展示其变更。
磁盘上的每个段都有一个相应的.del文件。当删除请求发送后,文档并没有真的被删除,而是在.del文件中被标记为删除。该文档依然能匹配查询,但是会在结果中被过滤掉。当段合并时,在.del文件中被标记为删除的文档将不会被写入新段。
在新的文档被创建时,Elasticsearch会为该文档指定一个版本号,当执行更新时,旧版本的文档在.del文件中被标记为删除,新版本的文档被索引到一个新段。旧版本的文档依然能匹配查询,但是会在结果中被过滤掉。
9、 大数据量(上亿量级)的聚合如何实现?
Elasticsearch 提供的首个近似聚合是cardinality 度量。
它提供一个字段的基数,即该字段的distinct或者unique值的数目。它是基于HLL算法的。HLL 会先对我们的输入作哈希运算,然后根据哈希运算的结果中的 bits 做概率估算从而得到基数。
其特点是:可配置的精度,用来控制内存的使用(更精确 = 更多内存);小的数据集精度是非常高的;我们可以通过配置参数,来设置去重需要的固定内存使用量。
无论数千还是数十亿的唯一值,内存使用量只与你配置的精确度相关。
10、 在并发情况下,Elasticsearch如果保证读写一致?
可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突。
另外对于写操作,一致性级别支持quorum/one/all,默认为quorum,即只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点上重建。
对于读操作,可以设置replication为sync(默认),这使得操作在主分片和副本分片都完成后才会返回;如果设置replication为async时,也可以通过设置搜索请求参数_preference为primary来查询主分片,确保文档是最新版本。
相关文章:
【数据库】elasticsearch
1、架构 es会为每个索引创建一定数量的主分片和副本分片。 分片(Shard): 将索引数据分割成多个部分,每个部分都是一个独立的索引。 主要目的是实现数据的分布式存储和并行处理,从而提高系统的扩展性和性能。 在创建索…...
Rust 构建 TCP/UDP 网络服务
第四章 异步编程与网络通信 第二节 构建 TCP/UDP 网络服务 在现代应用程序中,网络通信是核心功能之一。本节将重点介绍如何在 Rust 中构建基本的 TCP 和 UDP 网络服务,涵盖实际的代码示例、最佳实践以及最新的技术方案,以帮助开发者掌握网络…...
docker镜像文件导出导入
1. 导出容器(包含内部服务)为镜像文件(docker commit方法) 原理:docker commit命令允许你将一个容器的当前状态保存为一个新的镜像。这个新镜像将包含容器内所有的文件系统更改,包括安装的软件、配置文件等…...
ViT面试知识点
文章目录 VITCLIPBlipSAMLSegFast TransformerYOLO系列问题 BatchNorm是对一个batch-size样本内的每个特征做归一化,LayerNorm是对每个样本的所有特征做归一化。 Layer Normalization(层归一化,简称LayerNorm)是一种在深度学习中…...
ChatGPT 和 RAG(检索增强生成)的区别;ChatGPT 和 RAG 的联系
目录 ChatGPT 和 RAG(检索增强生成)的区别 知识来源与利用方式 回答准确性和可靠性 模型架构和复杂性 适用场景 ChatGPT 和 RAG 的联系 ChatGPT 和 RAG(检索增强生成)的区别 知识来源与利用方式 ChatGPT:是基于大规模预训练的语言模型,知识是在预训练过程中从大量的…...
qt获取本机IP和定位
前言: 在写一个天气预报模块时,需要一个定位功能,在网上翻来翻去才找着,放在这里留着回顾下,也帮下有需要的人 正文: 一开始我想着直接调用百度地图的API来定位, 然后我就想先获取本机IP的方…...
CodeQL学习笔记(5)-CodeQL for Java(AST、元数据、调用图)
最近在学习CodeQL,对于CodeQL就不介绍了,目前网上一搜一大把。本系列是学习CodeQL的个人学习笔记,根据个人知识库笔记修改整理而来的,分享出来共同学习。个人觉得QL的语法比较反人类,至少与目前主流的这些OOP语言相比&…...
服装品牌零售业态融合中的创新发展:以开源 AI 智能名片 S2B2C 商城小程序为视角
摘要:本文以服装品牌零售业态融合为背景,探讨信息流优化和资金流创新的重要作用,并结合开源 AI 智能名片 S2B2C 商城小程序,分析其如何进一步推动服装品牌在零售领域的发展,提高运营效率和用户体验,实现商业…...
前端将网页转换为pdf并支持下载与上传
1.pdf下载 handleExport() {const fixedH document.getElementById("fixed-h");const pageOne document.getElementById("mix-print-box-one");const pageTwo document.getElementById("mix-print-box-two");fixedH.style.height 30vh;pageO…...
Android 依赖统一配置管理(Version Catalogs)
最近升级了Android Studio版本到Koala Feature Drop | 2024.1.2,新建项目后发现项目配置又有变化,默认开始使用了一个名叫 Gradle 版本目录的东西,当然也可以称之为依赖统一配置管理,一开始还有点陌生,但是经过一番了解…...
如何为数据看板产品接入实时行情接口并展示行情
在金融科技领域,实时数据是分析和决策的关键因素。通过AllTick的实时行情API,您可以轻松将实时市场数据集成到数据看板产品中,为用户提供丰富的市场洞察。本文将详细介绍如何使用AllTick API,通过WebSocket协议接收并展示实时市场…...
数据结构 C/C++(实验一:线性表)
(大家好,今天分享的是数据结构的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 提要:实验题目 一、实验目的 二、实验内容及要求 三、算法思想 实验1 实验2 四、源程序及注释 …...
使用WebStorm开发Vue3项目
记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦!🤩 基本配置 打包工具:Vite 前端框架:ElementPlus 开发语言:Vue3、TypeScript、Sass 代码检查:ESLint、Prettier IDE…...
Linux高阶——1103——Signal信号机制
1、信号机制 在linux和unix系统下,如果想要处置(挂起,结束)进程,可以使用信号,经典消息机制,所以进程包括系统进程都是利用信号处置进程的 kill -l——查看所有系统支持的信号 1-31号信号——Unix经典信号ÿ…...
如何编写STM32的定时器程序
编写STM32的定时器程序通常涉及以下步骤: 1. 选择定时器和时钟配置 首先,你需要选择一个可用的定时器(TIM),并配置其时钟源。时钟源可以是内部时钟或外部时钟,通常通过RCC(Reset and Clock Con…...
【C++】C++的单例模式、跟踪内存分配的简单方法
二十四、C的单例模式、跟踪内存分配的简单方法 1、C的单例模式 本小标题不是讨论C的语言特性,而是一种设计模式,用于确保一个类在任何情况下都只有一个实例,并提供一个全局访问点来获取这个实例。即C的单例模式。这种模式常用于资源管理&…...
构建一个导航栏web
<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}#menu{background-color:purple;width: 100px;height: 50px;}.item{float: left;/* 浮动标签可以让块标签,…...
【Linux】Linux安全与密钥登录指南
在使用Linux服务器时,确保服务器的安全至关重要。本文将为你介绍一些关键的Linux安全措施,包括开启密钥登录、查看登录日志、限制登录IP以及查看系统中能够登录的账号。以下内容适合小白用户,通过简单的操作就能有效提升服务器的安全性。 目录…...
数据采集之scrapy框架
本博文使用基本框架完成搜房网或者其他网站的数据爬取(重点理解 scrapy 框架的构建过程,使用回调函数,完成数据采集和数据处理) 包结构目录如下图所示: 主要代码: (sfw.py) # -*- …...
ReactPress—基于React的免费开源博客CMS内容管理系统
ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议,感谢Star。 并能执行任务的下游应用。接着,文章列举了AI Agent的实际案例,如美团小美、AI Coding工具、SlidevAI和deepwiki,并区分了哪些应用不属于…...
从零构建MAX30102心率血氧监测系统
1. MAX30102传感器基础认知 第一次接触MAX30102时,我盯着这个5mm3mm的小芯片看了半天——很难想象这么小的器件能同时测量心率和血氧。它本质上是个光电生物传感器,工作原理就像用手电筒照手指:内置的红光(660nm)和红外光(880nm)LED穿过皮肤组…...
从《巴伦周刊》谈起,我们该如何保住 SRE 的直觉?
大多数 AI 依然停留在执行层面,它们只能在 Demo 里写写脚本。一旦丢进真实的生产集群,面对复杂的资源依赖和权限限制,它们很难像人类专家那样,给出真正能拍板的建议。最近,《巴伦周刊》对 Chaterm 的报道引起了我的注意…...
M5Stack U126 RTC驱动库:PCF8563T嵌入式实时时钟深度解析
1. 项目概述M5Unit-RTC 是专为 M5Stack 生态中 Unit 系列模块设计的轻量级实时时钟(RTC)驱动库,对应硬件型号为U126—— 一款基于Ricoh RP5C01A 兼容架构、实际采用 NXP PCF8563T 实时时钟芯片的 IC 接口 RTC 模块。该模块集成高精度温度补偿…...
3个步骤掌握阿里云盘命令行客户端的快传链接:大文件分享的终极解决方案
3个步骤掌握阿里云盘命令行客户端的快传链接:大文件分享的终极解决方案 【免费下载链接】aliyunpan 阿里云盘命令行客户端,支持JavaScript插件,支持同步备份功能。 项目地址: https://gitcode.com/GitHub_Trending/ali/aliyunpan 在当…...
STM32串口通信原理与实现详解
串口通信技术深度解析:从原理到STM32实现1. 串口通信基础概念1.1 数据传送方向分类串行通信根据数据传输方向可分为三种基本模式:单工模式:数据仅支持单向传输,如传统的广播系统。发送端和接收端角色固定,硬件上只需单…...
5步告别Windows卡顿:Win11Debloat系统优化工具让电脑性能提升51%的实战指南
5步告别Windows卡顿:Win11Debloat系统优化工具让电脑性能提升51%的实战指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各…...
EDCNN在低剂量CT图像去噪中的边缘增强与复合损失优化策略
1. 低剂量CT图像去噪的挑战与EDCNN的突破 低剂量CT扫描在临床应用中越来越普遍,因为它能显著降低患者接受的辐射剂量。但随之而来的问题是图像噪声增加,这给医生的诊断带来了巨大挑战。传统去噪方法往往难以在噪声抑制和细节保留之间取得平衡࿰…...
如何用ABC系统三分钟搞定复杂电路优化:顺序逻辑综合与形式验证的完整指南
如何用ABC系统三分钟搞定复杂电路优化:顺序逻辑综合与形式验证的完整指南 【免费下载链接】abc ABC: System for Sequential Logic Synthesis and Formal Verification 项目地址: https://gitcode.com/gh_mirrors/ab/abc 在现代数字电路设计中,你…...
高密度PCB贴装实战:如何用模块化治具解决0.3mm间距元件定位难题
高密度PCB贴装实战:模块化治具在0.3mm间距元件定位中的创新应用 当智能手表的PCB板面积缩小到指甲盖大小时,上面的0402元件间距已经突破0.3mm极限——这相当于在1元硬币上精准摆放50根头发丝。消费电子微型化浪潮下,传统治具的定位误差正在吞…...
