ES读数据的过程:

  1.ES客户端选择一个node发送请求,该请求作为协调节点(coordinating node);

  2.corrdinating node 对 doc id 对哈希,找出该文档对应所在的shards,将请求转发到对应的node,

  此时会使用round-robin 随机轮询算法,在primary shard 和 replica shard 之中选择一个 ,实现读请求的负载均衡;

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

  4.coordinate node 返回document 给客户端;

ES写数据的过程:

  1.ES客户端选择一个node发送请求,该请求作为协调节点(coordinating node);

  2.协调节点 对 doc id 对哈希,找出该文档存放的primary shard,将请求转发到该shard对应的节点;

  3.节点收到请求,primary shard处理写入,然后将数据同步到对应的replica shard 所在的节点;

  4.协调节点 发现 主分片和副分片都写入完成后 返回响应结果给 ES 客户端;

  

ES搜索数据的过程:

  1..ES客户端选择一个node发送请求,该请求作为协调节点(coordinating node);

  2. 协调节点将请求发送到所有的shard ,包括primary shard 或者是 replica shard

  3. shard 将搜索到的数据 也就是doc id 返回给协调节点

  4. 协调节点根据doc id ,将请求分发到doc id 对应的shard 去获取完整的document ,然后将数据返回给ES 客户端

ES写数据的底层原理:

  1.shard 收到写入请求后,写到内存buffer,同时写入到translog((每个shard都对应一个translog文件),注意内存buffer里面的数据是搜索不到的

  2.shard 会每隔1秒执行refresh操作,将buffer内的数据刷到os cache级别的缓存中去(这里是文件系统缓存),生成新的segement,buffer内的数据被刷到os cache中,

    buffer被清空,此时,这个数据也能被搜索到了

  3.重复1,2两个步骤,数据会被写入到一个一个的os cache 的 segment file 中去,并刷到磁盘中去,但是每次写入,translog 会越来越大,到达一定长度将会触发 commit 操作

  commit 操作

    将buffer内的现有数据refresh 到os cache中,清空buffer,然后将一个commit point 写入到磁盘中,里面标识这个commit point对应的所有segment file

    同时强行将os cache 里面的数据fsync到磁盘文件中去,最后清空现有的translog文件,重启一个新的translog文件;

    fsync+清空translog, 操作就是 flush,默认30分钟执行一次flush,如果translog 文件过大(默认512M)也会触发flush操作,flush

  注意:os 文件系统中的translog的数据写到磁盘中 translog文件中 fsync的操作默认每5s 执行一次;

参考:

https://blog.csdn.net/wang7075202/article/details/111308905

https://blog.csdn.net/lsgqjh/article/details/83022206

https://www.jianshu.com/p/15837be98ffd

https://blog.csdn.net/wx1528159409/article/details/105973336/

https://blog.csdn.net/u013129944/article/details/93720081

https://developer.51cto.com/art/202009/625293.htm

  

【ElasticSearch】ES 读数据,写数据与搜索数据的过程的更多相关文章

  1. Java NIO中的读和写

    一.概述 读和写是I/O的基本过程.从一个通道中读取只需创建一个缓冲区,然后让通道将数据读到这个缓冲区.写入的过程是创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入操作. 二.从文件中读取 ...

  2. NIO 中的读和写

    概述 读和写是I/O的基本过程.从一个通道中读取很简单:只需创建一个缓冲区,然后让通道将数据读到这个缓冲区中.写入也相当简单:创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入操作. 从文件 ...

  3. (转)通过HTTP RESTful API 操作elasticsearch搜索数据

    样例数据集 这是编造的JSON格式银行客户账号信息文档,文档schema如下: { “account_number”: 0, “balance”: 16623, “firstname”: “Brads ...

  4. zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的。

    zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的.

  5. selenium实现excel文件数据的读、写

    在进行软件测试或设计自动化测试框架时,一个不可避免的过程就是: 参数 化,在利用 python 进行自动化测试开发时,通常会使用 excel 来做数据管 理,利用 xlrd.xlwt 开源包来读写 e ...

  6. Elasticsearch 搜索数据

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

  7. [Elasticsearch] ES聚合场景下部分结果数据未返回问题分析

    背景 在对ES某个筛选字段聚合查询,类似groupBy操作后,发现该字段新增的数据,聚合结果没有展示出来,但是用户在全文检索新增的筛选数据后,又可以查询出来, 针对该问题进行了相关排查. 排查思路 首 ...

  8. elasticsearch与mongodb分布式集群环境下数据同步

    1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索 ...

  9. SQL数据同步到ElasticSearch(三)- 使用Logstash+LastModifyTime同步数据

    在系列开篇,我提到了四种将SQL SERVER数据同步到ES中的方案,本文将采用最简单的一种方案,即使用LastModifyTime来追踪DB中在最近一段时间发生了变更的数据. 安装Java 安装部分 ...

随机推荐

  1. java中ArrayList 和 LinkedList 有什么区别

    转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...

  2. dubbo-zookeeper quick start

    目录 dubbo快速开始 服务提供者(Service provider) 定义服务接口(Defining service interfaces) 在服务提供方实现接口(Implement interf ...

  3. 180. 连续出现的数字 + MySql + 连续出现数字 + 多表联合查询

    180. 连续出现的数字 LeetCode_MySql_180 题目描述 代码实现 # Write your MySQL query statement below select distinct t ...

  4. PAT-1066(Root of AVL Tree)Java语言实现

    Root of AVL Tree PAT-1066 这是关于AVL即二叉平衡查找树的基本操作,包括旋转和插入 这里的数据结构主要在原来的基础上加上节点的高度信息. import java.util.* ...

  5. dom_bom学习

    1. bom是什么? browser object model(浏览器对象模型) 在浏览器中 window指的就是bom对象 //网页重定向 // window.location.href=" ...

  6. python ORM之sqlalchemy

    前沿对象关系映射ORM是在实际应用编程中常用到的技术,它在对象和关系之间建立了一条桥梁,前台的对象型数据和数据库中的关系型的数据通过这个桥梁来相互转化.简单来说就是开发人员在使用ORM模型编程时,不需 ...

  7. 项目实战:Qt+C#轨道交通行业高性能高流畅度模拟火车移动图像控件

    需求   高清线阵相机扫描火车并自动切割单节车厢完成图像合成.通过视频图像处理组件流畅模拟火车行驶整个过程的视频图像:  1.模拟火车通过时的滚动图像,图像主要以两侧和顶部图像的预览为主;  2.模拟 ...

  8. 开源项目月刊《HelloGitHub》第 60 期

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...

  9. 【Spring Cloud & Alibaba全栈开源项目实战】:SpringBoot整合ELK实现分布式登录日志收集和统计

    一. 前言 其实早前就想计划出这篇文章,但是最近主要精力在完善微服务.系统权限设计.微信小程序和管理前端的功能,不过好在有群里小伙伴的一起帮忙反馈问题,基础版的功能已经差不多,也在此谢过,希望今后大家 ...

  10. Vue组件(35)动态组件 component 的 is 到底可以是啥?

    component 动态组件 Vue官网上提供了一个动态组件 <component :is="currentTabComponent"> ,那么这里的 is 到底是什么 ...