美文网首页
Elasticsearch基本概念

Elasticsearch基本概念

作者: Splunker | 来源:发表于2019-12-12 22:08 被阅读0次

    索引

    • 索引是文档的容器,是一类文档的集合

      1. index 体现了逻辑空间的概念: 每个索引都有自己的Mapping定义,用于定义包含的文档的字段名和字段类型。
      2. Shard 体现了物理空间的概念:索引中的数据分散在Shard上。
    • 索引这个词在 ElasticSearch 会有三种意思:

      1. 索引(名词)
        类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库(Database)。索引由其名称(必须为全小写字符)进行标识。
      2. 索引(动词)
        保存一个文档到索引(名词)的过程。这非常类似于SQL语句中的 INSERT关键词。如果该文档已存在时那就相当于数据库的UPDATE。
      3. 倒排索引
        关系型数据库通过增加一个B+树索引到指定的列上,以便提升数据检索速度。索引ElasticSearch 使用了一个叫做 倒排索引 的结构来达到相同的目的。
    • 与关系型数据库的类比



    Type

    Type 可以理解成关系数据库中Table。
    之前的版本中,索引和文档中间还有个类型的概念,每个索引下可以建立多个类型,文档存储时需要指定index和type。从6.0.0开始单个索引中只能有一个类型,7.0.0以后将将不建议使用,8.0.0 以后完全不支持。

    弃用该概念的原因:
    1. 我们虽然可以通俗的去理解Index比作 SQL 的 Database,Type比作SQL的Table。但这并不准确,因为如果在SQL中,Table 之前相互独立,同名的字段在两个表中毫无关系。但是在ES中,同一个Index 下不同的 Type 如果有同名的字段,他们会被 Luecence 当作同一个字段 ,并且他们的定义必须相同。所以我觉得Index现在更像一个表,而Type字段并没有多少意义。
    2. 目前Type已经被Deprecated,在7.0开始,一个索引只能建一个Type为_doc

    文档(Document)

    • Index 里面单条的记录称为Document(文档)。等同于关系型数据库表中的行
    • Elasticsearch 是面向文档的,文档是所有可搜索数据的最小单位。
      1. 一部电影的具体信息/一张唱片的详细信息
    • 文档会被序列化JSON格式,保存在Elasticsearch中
      1. JSON对象由字段组成
      2. 每个字段都有对应的字段类型 (字符串/数值/布尔/日期/二进制/范围类型)
    • 每个文档都有一个Unique ID
      1. 你可以自己指定ID
      2. 或者通过Elasticsearch自动生成
    • 文档的源数据


    #源数据用于标注文档的相关信息
    #_index 文档所属的索引名
    #_type 文档所属的类别名
    #_id 文档的唯一id
    #_source 文档的原始Json数据
    #_version 文档的版本信息
    #_seq_no 严格递增的顺序号,每个文档一个,Shard级别严格递增,保证后写入的Doc的_seq_no大于先写入的Doc的_seq_no
    #primary_term primary_term也和_seq_no一样是一个整数,每当Primary Shard发生重新分配时,比如重启,Primary选举等,_primary_term会递增1
    #found 查询的ID正确那么ture, 如果 Id 不正确,就查不到数据,found字段就是false。
    

    节点

    • 节点是一个Elasticsearch的实例
      1. 本质上就是一个JAVA进程。
      2. 一台机器可以运行多个Elasticsearch进程,但是生产环境一般建议还是一台机器运行一个Elasticsearch实例。
    • 每个节点都有名字,通过配置文件配置,或者启动的时候 -E node.name=node1 指定
    • 每个节点在启动之后,会分配一个UID,保存在data目录下
    Master-eligible 节点 和 Master 节点
    • 每个节点启动后,默认就是一个Master eligible 节点
    • Master-eligible节点可以参加选主流程,成为Master节点
    • 当第一个节点启动的时候,它会将自己选举成Master节点
    • 每个节点上都保存了集群的状态,但是只有Master节点才能修改集群的状态信息
      1. 集群状态(Cluster State),维护了一个集群中,必要的信息所有的节点信息所有的索引和其相关的Mapping 与 Setting 信息分篇的路由信息
    Data 节点 和 Coordinating 节点
    • Data 节点
      1. 可以保存数据的节点,叫做Data Node。负责保存分片数据,在数据扩展上起到了至关重要的作用。
    • Coordinating 节点
      1. 负责接受Client的请求,将请求分发到合适的节点,最终把结果汇聚到一起。
      2. 每个节点默认都起到了Coordinating Node 的职责。
    其他节点
    • Hot & Warm 节点
      1. 不同硬件配置的Data Node,用来实现Hot & Warm 结构,降低集群部署的成本。
    • Machine Learning Node
      1. 负责跑机器学习的Job。

    分片

    • 主分片,用以解决数据水平扩展的问题,通过主分片,可以将数据分布到集群的所有节点之上
      1. 一个分片是一个运行的Lucene的实例。
      2. 主分片在索引创建时指定,后续不允许修改,除非Reindex。
    • 副本,用以解决数据高可用的问题,副本分片是主分片的拷贝
      1. 副本分片数,可以动态调整。
      2. 增加副本数,还可以在一定程度上提高服务可用性(读取的吞吐)。
    • 分片的设定
    1. 分片数设置过小
      导致后续无法增加节点进行水平扩展。
      导致分片的数据量太大,数据在重新分配时耗时。
    2. 分片数设置过大
      影响搜索结果的相关性打分,影响统计结果的准确性。
      单个节点上过多的分片,会导致资源浪费,同时也会影响性能。

    相关文章

      网友评论

          本文标题:Elasticsearch基本概念

          本文链接:https://www.haomeiwen.com/subject/bnzzgctx.html