elasticSearch es 概念 写入 读取 搜索数据 原理

一:概念

1.index 相当于数据库中的一张表

2.mapping相当于字段表结构的定义(字段及类型)

3.document代表数据表中的一条数据,每个document中有多个filed,每个filed就代表这个document中一个字段的值

4.shard 每个index会被拆成多个shard,每个shard中放index的一部分数据,每个shard可能分在不同的机器上,每个shard都有一个副本,主数据和副本不在同一台机器,primary shard 会自动同步到replication shard上

masterNode做一些全局的管理工作,假如masterNode挂掉后,会进行选举,之前挂点的shard中replication shard的Node节点会转变成master shard

二:写入原理

数据发送到es的协调节点上,协调节点通过hash运算把数据分配到不同或相同节点的shard上,这时候,数据会写到内存buffer中,同时写入到translog中,此时,进行搜索是搜不到数据的,当buffer中的数据写入到os Cahe中后,内存buffer中的大数据会被清除,才可以搜索到数据(每隔一秒才从buffer中刷入到osCache中,属于准实时的,而translog默认是每隔5秒刷入到磁盘中,假如这5秒内机器宕机,则会丢失5秒数据,但是这样的性能是最高的),当translog文件变的大到一定阈值,会执行cimmit操作(1.commit point会对应此次对应的segment File;2.将os cache 中的数据强刷到磁盘中去;3.清空translog文件日志),因buffer和os cache都属于内存级别的,机器宕机,会从已经刷入到磁盘中的translog文件中就行数据的恢复读取;默认的commit是30分钟执行一次的;es中的flush操作就是对应的commit操作,磁盘上的文件分为三种:1、segmentFile 2.commit point 文件3.translog文件;删除的数据会标识成.del文件(逻辑删除) ;当segmentFile多到一定程度的时候会进行merge,生成一个大的segmentFile后删除其他小的segmentFile;merge过程中,会对.del文件进行物理删除

三:读取原理

1.当写入完数据后,会自动生成一个全局的document id,会根据doc id hash路由到对应的primary shard上,也可以手动来指定doc id,例如使用订单id,用户id;客户端发送读取数据请求到任意一个节点(这个节点称为协调节点)

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

3.接收请求的node返回数据给coordinate node,coordinate node返回数据document 给客户端

四:搜索

1.客户端发送请求到coordinate node

2.coordinate node把请求转发到所有的shard对应的primary shard或replicate shard

3.每个shard将自己的搜索结果(其实就是一些doc id)返回给协调节点coordinate node,由协调节点再根据doc id 进行路由到shard primary或shard replicate 获取数据后进行数据合并、排序、分页等操作,产生最终结果

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

softwareDragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值