当前位置: 首页 > news >正文

ElasticSearch系列-索引原理与数据读写流程详解

       


索引原理

倒排索引

倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。ES底层在检索时底层使用的就是倒排索引。

索引模型

现有索引和映射如下:

{"products" : {"mappings" : {"properties" : {"description" : {"type" : "text"},"price" : {"type" : "float"},"title" : {"type" : "keyword"}}}}
}

先录入如下数据,有三个字段title、price、description等

_idtitlepricedescription
1蓝月亮洗衣液19.9蓝月亮洗衣液高效
2iphone1319.9不错的手机
3小浣熊干脆面1.5小浣熊好吃

在ES中除了text类型分词,其他类型不分词,因此根据不同字段创建索引如下:

  • title字段:

    term_id(文档id)
    蓝月亮洗衣液1
    iphone132
    小浣熊干脆面3
  • price字段

    term_id(文档id)
    19.9[1,2]
    1.53
  • description字段

    term_idterm_idterm_id
    123
    123
    123
    123
    123
    1
    [1:1:9,2:1:6,3:1:6]
    1
    1

注意: Elasticsearch分别为每个字段都建立了一个倒排索引。因此查询时查询字段的term,就能知道文档ID,就能快速找到文档。

数据写入流程

  1. 先写入buffer,在buffer里的时候数据是搜索不到的;同时将数据写入translog日志文件

  2. 如果buffer快满了,或者到一定时间,就会将buffer数据refresh到一个新的segment file中,但是此时数据不是直接进入segment file的磁盘文件的,而是先进入os cache的。这个过程就是refresh。为什么叫es是准实时的?NRT,near real-time,准实时。默认是每隔1秒refresh一次的,所以es是准实时的,因为写入的数据1秒之后才能被看到。

  3. 只要数据进入os cache,此时就可以让这个segment file的数据对外提供搜索了

  4. 重复1~3步骤,新的数据不断进入buffer和translog,不断将buffer数据写入一个又一个新的segment file中去,每次refresh完buffer清空,translog保留。随着这个过程推进,translog会变得越来越大。当translog达到一定长度的时候,就会触发mit操作。

  5. mit操作发生第一步,就是将buffer中现有数据refresh到os cache中去,清空buffer

  6. 将一个mit point写入磁盘文件,里面标识着这个mit point对应的所有segment file

  7. 强行将os cache中目前所有的数据都fsync到磁盘文件中

  8. 将现有的translog清空,然后再次重启启用一个translog,此时mit操作完成。默认每隔30分钟会自动执行一次mit,但是如果translog过大,也会触发mit。整个mit的过程,叫做flush操作。我们可以手动执行flush操作,就是将所有os cache数据刷到磁盘文件中去。

    es中的flush操作,就对应着mit的全过程。我们也可以通过es api,手动执行flush操作,手动将os cache中的数据fsync强刷到磁盘上去,记录一个mit point,清空translog日志文件。

  9. translog其实也是先写入os cache的,默认每隔5秒刷一次到磁盘中去,所以默认情况下,可能有5秒的数据会仅仅停留在buffer或者translog文件的os cache中,如果此时机器挂了,会丢失5秒钟的数据。但是这样性能比较好,最多丢5秒的数据。也可以将translog设置成每次写操作必须是直接fsync到磁盘,但是性能会差很多。

  10. 如果是删除操作,mit的时候会生成一个.del文件,里面将某个doc标识为deleted状态,那么搜索的时候根据.del文件就知道这个doc被删除了

  11. 如果是更新操作,就是将原来的doc标识为deleted状态,然后新写入一条数据

  12. buffer每次refresh一次,就会产生一个segment file,所以默认情况下是1秒钟一个segment file,segment file会越来越多,此时会定期执行merge

  13. 每次merge的时候,会将多个segment file合并成一个,同时这里会将标识为deleted的doc给物理删除掉,然后将新的segment file写入磁盘,这里会写一个mit point,标识所有新的segment file,然后打开segment file供搜索使用,同时删除旧的segment file。

es里的写流程,有4个底层的核心概念,refresh、flush、translog、merge

当segment file多到一定程度的时候,es就会自动触发merge操作,将多个segment file给merge成一个segment file。

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

数据查询流程

  1. 客户端发送请求到任意一个node,成为coordinate node

  2. coordinate node对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮询算法,在primary  shard以及其所有replica中随机选择一个,让读请求负载均衡

  3. 接收请求的node返回document给coordinate node

  4. coordinate node返回document给客户端

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

今天的分享就到这里,喜欢的朋友可以点赞收藏,感谢!!

相关文章:

ElasticSearch系列-索引原理与数据读写流程详解

索引原理 倒排索引 倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。ES底层在检索时底层使用的就是倒排索引。 索引模型 现有索…...

【码银送书第七期】七本考研书籍

八九月的朋友圈刮起了一股晒通知书潮,频频有大佬晒出“研究生入学通知书”,看着让人既羡慕又焦虑。果然应了那句老话——比你优秀的人,还比你努力。 心里痒痒,想考研的技术人儿~别再犹豫了。小编咨询了一大波上岸的大佬&#xff…...

docker容器的设置本地时间(/etc/localtime)和本地时区(/etc/timezone)

本地时区的修改 一般情况下,我们启动docker容器时指定了环境变量: -e TZ:Asia/Ho_Chi_Minh ,容器内的时区就会变成东八区,某些软件则会读取该环境变量作为其使用的时区,该环境变量相当于"残缺版"的命令&…...

侯捷老师C++课程:内存管理

内存管理 第一讲&#xff1a;primitives c应用程序 c内存的基本工具 测试程序&#xff1a; #include <iostream> using namespace std; #include <complex> #include <ext/pool_allocator.h>int main() {// 三种使用方法void* p1 malloc(512); // 512 b…...

A股风格因子看板 (2023.09 第05期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第05期&#xff0c;指数组合数据截止日2023-08-31&#xff0c;要点如下 近1年A股风格因子检验统…...

修炼离线:(二)sqoop插入hbase 脚本(增量)

一&#xff1a;mysql创建表&#xff0c;插入数据。 二&#xff1a;hbase创建表。 habse shell create aa(表名),cf(列族)三&#xff1a;mysql_hbase脚本。 #!/bin/shmysqlHost$1 mysqlUserName$2 mysqlUserPass$3 mysqlDbName$4 myqlTbName$5 hbaseTbName$6 hbaseTbRowkey$7…...

跨平台编程开发工具Xojo 2023 Release mac中文版功能介绍

Xojo mac是一款跨平台的软件开发工具&#xff0c;它允许开发人员使用一种编程语言来创建应用程序&#xff0c;然后可以在多个操作系统上运行。Xojo 2023是Xojo开发工具的最新版本&#xff0c;它提供了许多功能和改进&#xff0c;以帮助开发人员更轻松地构建高质量的应用程序。 …...

OpenCV Series : Target Box Outline Border

角点 P1 [0] (255, 000, 000) P2 [1] (000, 255, 000) P3 [2] (000, 000, 255) P4 [3] (000, 000, 000)垂直矩形框 rect cv2.minAreaRect(cnt)targetColor roi_colortargetThickness 1targetColor (255, 255, 255)if lineVerbose:if …...

【AD】【规则设置】设置四层板

设置四层板 一般 4层板&#xff0c;都会把 地 和 VCC放在内层。1、使用快捷键D-K 进入层叠管理器&#xff0c;添加负片层添加完后&#xff0c;修改层名&#xff0c;方便辨识修改格式&#xff1a;属性层号 2、进入相应layer 设置网络设置GND层设置VCC层特点&#xff1a;在层内可…...

Linux安装JDK1.8并配置环境变量

Linux安装JDK并配置环境变量Linux安装JDK并配置环境变量Linux安装JDK并配置环境变量 一、查询已有JAVA环境版本信息 java -version 二、下载Oracle JDK安装包 https://www.oracle.com/java/technologies/downloads/archive/ 三、安装 配置JDK 以下方式适用于安装各版本JDK&…...

面向面试知识--MySQL数据库与索引

面向面试知识–MySQL数据库与索引 优化难点与面试点 什么是MySQL索引&#xff1f; 索引的MySQL官方定义&#xff1a;索引是帮助MySQL快速获取数据的数据结构。 动力节点原文&#xff1a; MysQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。 MysQL在存储数据之…...

portainer + portainer/agent

参考链接 https://docs.portainer.io/ portainer 免费版 portainer-ce 免费版 portainer-ee 企业版 portainer-agent docker本机代理 agent 下载地址 https://download.csdn.net/download/a309450028a/87451332 portainer 下载地址 https://download.csdn…...

C# 截取字符串

在 C# 中&#xff0c;可以使用 Substring 方法来截取字符串的一部分。该方法有两个参数&#xff1a;起始索引和要截取的字符数。 以下是使用 Substring 方法截取字符串的示例&#xff1a; string str "Hello World"; string result str.Substring(6); // 从索引为…...

FOXBORO FBM233 P0926GX控制脉冲模块

FOXBORO FBM233 P0926GX 是一种控制脉冲模块&#xff0c;通常用于工业自动化和控制系统中。这个模块的主要功能是生成和控制脉冲信号&#xff0c;以用于执行特定的操作或控制过程。以下是可能适用于 FOXBORO FBM233 P0926GX 控制脉冲模块的一些常见特点&#xff1a; 脉冲生成&a…...

MySQL性能优化——MYSQL执行流程

MySQL 执行流程1-5如下图。 MySQL 的架构共分为两层&#xff1a;Server 层和存储引擎层&#xff0c; Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现&#xff0c;主要包括连接器&#xff0c;查询缓存、解析器、预处理器、优化器、执行器等。…...

Django:四、Djiango如何连接使用MySQL数据库

一、安装数据库第三方插件 安装下载mysql第三方插件 pip install mysqlclient 二、创建MySQL数据库 ORM可以帮助我们做两件事&#xff1a; 创建、修改、删除数据库中的表&#xff08;不用写SQL语句&#xff09;&#xff0c;但无法创建数据库操作表中的数据&#xff08;不用…...

LeetCode 热题 100(八):贪心。121. 买卖股票的最佳时机、45. 跳跃游戏 II

题目一&#xff1a; 121. 买卖股票的最佳时机https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 思路&#xff1a;因为时间复杂度O&#xff08;n&#xff09;&#xff0c;所以使用贪心来做。类似双指针&#xff0c;一个指针记录到当前循环时最小的股票价格&…...

第N个数字

给你一个整数 n &#xff0c;请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。 我觉得这题是哪以理解的 看这个题解 func findNthDigit(n int) int {digit : 1start : 1count : 9for n > count {n - countdigitstart start …...

【适用于电力系统和音频系统】计算信号的总谐波失真 (THD)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

kubernetes(k8s)PVC

概念 PVC 的全称是&#xff1a;PersistentVolumeClaim&#xff08;持久化卷声明&#xff09;&#xff0c;PVC 是用户存储的一种声明&#xff0c;PVC 和 Pod 比较类似&#xff0c;Pod 消耗的是节点&#xff0c;PVC 消耗的是 PV 资源&#xff0c;Pod 可以请求 CPU 和内存&#x…...

Android ANR问题触发机制

1 Anr类型 ​ Anr一般有四种类型。 1.1 input dispatching timeout ​ 主要时按键或触摸屏事件在5s内没有响应。这个时间在ActivityManagerService中定义。 C:\Users\wangjie\AppData\Local\Android\Sdk\sources\android-32\com\android\server\am\ActivityManagerService.…...

解决jupyter找不到虚拟环境的问题

解决jupyter找不到虚拟环境的问题 使用jupyter只能使用base环境&#xff0c;不能找到自己创建的虚拟环境。如下图&#xff0c;显示的默认的虚拟环境base的地址。 如何解决这个问题&#xff1f;需要两个步骤即可 1 . 在base环境中安装nb_conda_kernels这个库 activate base c…...

Unity丨移动相机朝向目标并确定目标在摄像机可视范围内丨摄像机注释模型丨摄像机移动丨不同尺寸模型优化丨

文章目录 问题描述功能展示技术细节小结 问题描述 本文提供的功能是摄像机朝向目标移动&#xff0c;并确定整个目标出现在摄像机视角内&#xff0c;针对不同尺寸的模型优化。 功能展示 提示&#xff1a;这里可以添加技术名词解释 技术细节 直接上代码 using UnityEngine;…...

排序算法:归并排序(递归和非递归)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关排序算法的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通…...

数据可视化

一、Flask介绍 #通过访问路径&#xff0c;获取用户的字符串参数 app.route(/user/<name>) def welcome(name):return "你好&#xff0c;%s"%nameapp.route(/user/<int:id>) def welcome2(id):return "你好&#xff0c;%d号的会员"%id能够自动…...

Go并发可视化解释 – select语句

上周&#xff0c;我发布了一篇关于如何直观解释Golang中通道&#xff08;Channel&#xff09;的文章。如果你对通道仍然感到困惑&#xff0c;请先查看那篇文章。 Go并发可视化解释 — Channel 作为一个快速复习&#xff1a;Partier、Candier和Stringer经营着一家咖啡店。Partie…...

http的网站进行访问时候自动跳转至https

通常情况下我们是用的都是http的路径&#xff0c;对于https的使用也很少&#xff0c;但是随着https的普及越来越多的域名访问需要用到https的&#xff0c;这个我们就演示怎么设置在我们对一个http的网站进行访问时候自动跳转至https下。 用到的工具及软件: 系统&#xff1a;wi…...

realloc

目录 前提须知&#xff1a; 函数介绍&#xff1a; 函数原型&#xff1a; 使用realloc&#xff1a; realloc在调整内存空间的是存在两种情况/使用realloc为扩大空间的两种情况 1.是剩下的没有被分配的空间足够 2 .剩下没有被分配的空间不够了 注意事项&#xff1a; rea…...

Windows AD域使用Linux Samba

Windows AD域使用Linux Samba 1. 初始化配置 1.1 初始化配置 配置服务器名 hostnamectl set-hostname samba.sh.pana.cnhosts文件配置,确保正常解析到本机和域控 [rootcentos7 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.loc…...

Scrapy+Selenium自动化获取个人CSDN文章质量分

前言 本文将介绍如何使用Scrapy和Selenium这两个强大的Python工具来自动获取个人CSDN文章的质量分数。我们将详细讨论Scrapy爬虫框架的使用&#xff0c;以及如何结合Selenium浏览器自动化工具来实现这一目标。无需手动浏览每篇文章&#xff0c;我们可以轻松地获取并记录文章的…...

腾讯 网站开发/44555pd永久四色端口

Vite 概念 Vite 是一个面向现代浏览器的一个更轻、更快的Web 应用开发工具它基于 ECMAScript 标准原生模块系统&#xff08;ES Modules&#xff09;实现Vite 项目依赖 Vitevue/compiler-sfc 基础使用 vite servevite build serve HMR 热加载 Vite HMR 立即编译当前所修改的文…...

怎样做o2o网站/免费发软文的网站

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />移动电子商务的七大机会移动电子商务被很多人看作是一次新的机会。包括泛商务时代的一种潜在机会。不过在具体的发展规划和操作上&#xff0c;很多人还是对此有点摸不着头脑&…...

建设工程教育网app下载/seo优化的技巧

Version 4.0千搜科技第四代人脸识别引擎java接口目录结构java 目录存放java SDK的源码jni 存放java调用C SDK的jni源码java版本java version "1.8.0_111"Java(TM) SE Runtime Environment (build 1.8.0_111-b14)Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14…...

网站已备案添加新域名/吉林seo推广

操作系统&#xff1a;windows 2008 R2 SP1 vCenter版本&#xff1a;5.0 数据库版本&#xff1a;SQL 2008 R2 企业版 在安装完数据库&#xff0c;继续安装VC时&#xff0c;会提示80端口被占用&#xff0c;这是由于SQL 2008的"SQL Server Reporting Services"服务造成的…...

自己的网站统计输入词/微商软文范例大全100

悠悠导航地图app是一款非常好用的手机导航软件&#xff0c;这里有着专业全面的导航内容&#xff0c;让你出行可以更方便&#xff0c;悠悠导航地图app有着专业精准的导航功能&#xff0c;还能为你提供周边相关吃喝玩乐服务平台&#xff0c;非常安全便捷&#xff0c;赶快来用吧&a…...

可以做旅行计划的网站/百度客服中心人工在线咨询

作为一个软件工程团队&#xff0c;离不开下面三个要素&#xff1a;支持&#xff0c;即分享、责任和合作。 分享是出色技术团队的另一个关键要素&#xff0c;它是团队的基石之一。只有通过分享&#xff0c;团队才有可能实现11 > 2这种效应&#xff0c;分享也是让团队在整体上…...