Elasticsearch写入数据的过程是什么?以及是如何更新索引数据的

前言

最近面试过程中遇到问Elasticsearch的问题不少,这次总结一下,然后顺便也了解一下Elasticsearch内部是一个什么样的结构,毕竟总不能就只了解个倒排索引吧。本文标题就是我遇到过的两个问题,所以此次基本上只是围绕着这两个问题来总结。

ES写入数据

在介绍写入数据的过程时,先明确一下ES中的一些关键性的概念:

  • Clouster:集群,由一到N个Elasticsearch服务节点组成。
  • Node:节点,组成Elasticsearch集群的基本单元,单个集群内节点名称唯一。通常一个节点中分配一到多个分片。
  • Shards:分片,当ES的索引数据过大时,会进行水平拆分,拆分出来的每一个单元都称为分片。在进行写入数据的时候,会通过路由来确定具体写到哪个分片上,所以在创建索引的时候就要确定好分片数量,并且一旦确定不可更改。索引数据在经过分片后,在数据管理和性能上都有很大提升,并且每一个分片都是一个Lucende的索引,每个分片都必须有一个主分片和零到多个副分片
  • Replicas:副本或备份,副本是指对主分片的备份分片,无论是主分片还是副本分片都可以对外提供查询服务。但是写入操作时是先写入主分片,然后再分发到副本上。
    当主分片不可用时会在副本分片上选举一个作为主分片,因此副本不仅可以保证系统的高可用性,还可以提升搜索时的并发性能(主副分片都可以提供查询)。但并不是副本越多越好,副本数量过多会导致数据同步的负担过大。

分片数 (副本数+1)= 所需的最大节点数
举例:你计划5个分片和1个副本,那么所需要的最大的节点数为:5
(1+1)=10个节点。

  • Index:索引,由一个和多个分片组成,单个集群内索引名字是唯一的。
  • Type:类型,指索引内部的逻辑分区,一般是通过Type的名字来进行分区,若是查询条件中没有该值,则说明在整个索引中执行查询。
  • Document:文档,ES索引中的每一条数据都称为一个Document,基本上和关系型数据库中的一个记录意思相同,通过_id,在Type内进行唯一标识。
  • Settings:对集群中索引的设定,例如默认的分片数量,副本数等信息。
  • Mapping:这里的Mapping类似于,关系型数据库的表结构信息,这里面包含了索引中字段的存储类型,分词方式,是否分词等信息。
    Elasticsearch中的Mapping是可以动态识别的,Elasticsearch字段的数据格式识别它的类型,但是若是需要对Filed字段进行特殊设置时,就需要手动创建Mapping了。注意:一个Mapping一旦创建成功后,若是已经存储了数据了,就不可以修改了。
  • Analyzer:字段的分词方式的定义,一个Analyzer,通常由一个Tokenizer&#
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值