es文档落盘
当写入数据时主要分为以下几步:
- 先写入lucene的index文件,es为全文检索做了优化,分段索引文件
- 将分段文件写入内存
- 记录写入日志,类似数据库的binlog,保证数据的安全
- 从内存写入操作系统文件缓冲区,写入缓冲区之后就可以进行查询了
- 从缓冲区进行落盘,写入磁盘
因为刷盘操作比较消耗io,所以刷盘操作一般可以间隔时间长一点(30min),但是refresh就要比较快,要达到类似实时的效果(1s)
es读取数据架构
读取数据:
- 客户端发送请求到协调节点
- 协调节点查询存在数据的所有分片和副本分片
- 采用轮询策略查询数据
- 返回客户端
es写入数据架构
与读取数据结构类似
- 客户端发送请求到协调节点
- 协调节点将存储的数据转换到对应的节点
- 这里的转换是根据公式计算数据应该存在哪个分片上===== hash(id)%主分片的数量 = 分片的位置
- 这也是为什么分片数不能修改的原因,分片数一旦改变,则数据位置就变化了
- 对应的主分片写入数据
- 副本写入数据
- 主分片反馈客户端