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. 100道Java高频面试题(阿里面试官整理)

    我分享文章的时候,有个读者回复说他去年就关注了我的微信公众号,打算看完我的所有文章,然后去面试,结果我后来很长时间不更新了...所以为了弥补一直等我的娃儿们,给大家的金三银四准备了100道花时间准备的 ...

  2. 【图像处理】使用OpenCV+Python进行图像处理入门教程(三)色彩空间

    这篇随笔介绍使用OpenCV进行图像处理的第三章 色彩空间. 3  色彩空间 之前的介绍,大多是基于BGR色彩空间进行的,但针对不同的实际情况,研究人员提出了许多色彩空间,它们都有各自擅长处理的领域. ...

  3. HDOJ-1711(KMP算法)

    Number Sequence HDOJ-1711 1.这里使用的算法是KMP算法,pi数组就是前缀数组. 2.代码中使用到了一个技巧就是用c数组看成是复合字符串,里面加一个特殊整数位-1000006 ...

  4. Java 语言基础 02

    语言基础·二级 顺序结构语句 * A:什么是流程控制语句    * 流程控制语句:可以控制程序的执行流程. * B:流程控制语句的分类    * 顺序结构    * 选择结构    * 循环结构 *  ...

  5. Java 多线程 01

    多线程· Runnable 和 Thread 多线程的引入 * A:什么是线程 * 线程是程序执行的一条路径,一个进程中可以包含多条线程 * 多线程并发执行可以提高程序的效率,可以同时完成多项工作 * ...

  6. js 数组的浅拷贝和深拷贝

    1.背景介绍 javascript分原始类型与引用类型.Array是引用类型,直接用"="号赋值的话,只是把源数组的地址(或叫指针)赋值给目的数组,指向的是同一个内存地址,其中一个 ...

  7. pandas函数高级

    一.处理丢失数据 有两种丢失数据: None np.nan(NaN) 1. None None是Python自带的,其类型为python object.因此,None不能参与到任何计算中. #查看No ...

  8. python实现顺序表

    python实现顺序表可以有两中形式进行存储 列表 元组 其实简单来说,顺序表无非就是操作列表和元组的方法来对顺序表进行操作. 实例代码 7 class SqList: 8 def __init__( ...

  9. P1540_机器(JAVA语言)

    题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...

  10. unable to read askpass response from 'C:\Users\wxy\.IntelliJIdea2019.1\system\tmp\intellij-git-askpass.bat' bash: /dev/tty: No such device or address failed to execute prompt script (exit code 1)

    解决方法: