ElasticSearch 基本概念

ElasticSearch 基本概念

文档(Document)
  • ES是面向文档的,文档是所有可搜索数据的最小单位

    • 日志文件中的日志项
    • 一本电影的具体信息 / 一张唱片的详细信息
    • MP3 播放器里的一首歌/ 一篇 PDF 文档中的具体内容
    • 关系型数据库中的一条记录
  • 文档会被序列化成 JSON 格式保存在ES中

    • JSON对象由字段组成
    • 每个字段都有对应的字段类型(字符串 / 数组 / 布尔 / 日期 / 二进制 / 范围类型)
    • 字段类型可以指定或者通过ES自动推算,支持数组 / 支持嵌套
  • 每个文档都有一个 Unique ID

    • 支持指定ID
    • 或者通过 ES 自动生成。自动生成的ID,长度为20个字符,URL安装,base64编码,GUID,分布式系统并行生成时不可能会发生冲突

文档元数据,元数据用于标注文档的相关信息

  • _index: 文档所属的索引名
  • _type: 文档所属的类型名
  • _id: 文档唯一ID
  • _source 文档的原始JSON数据
  • _version: 文档的版本信息
  • _socre: 相关性打分
  • _all: 整合所有字段内容到该字段,7.0以上版本已被废除

索引(Index)
  • 索引是文档的容器,是一类文档的结合

    • Index 体现了逻辑空间的概念:每个索引都有自己的 Mapping 定义,用于定义包含的文档的字段名和字段类型
    • Shard(分片)体现了物理空间的概念:索引中的数据分散在 Shard 上
  • Mapping 与 Settings

    • Mapping 定义文档字段的类型
    • Setting 定义不同的数据分布

索引的不同语意

  • 名词:一个ES集群中,可以创建很多个不同的索引
  • 动词:保存一个文档到ES中的过程也称索引(Indexing)
    ES中,创建一个倒排的过程
  • 名词:一个B树索引,一个倒排索引
Type
  • 在7.0版本之前,一个Index可以设置多个Types,7.0版本后,一个索引只能创建一个Type: _doc
ElasticSearch对比关系型数据库
关系型数据库 ElasticSearch
Table(表) Index(Type)(索引)
Row(行) Document(文档)
Column(列) Field(字段)
Schema(表结构) Mapping(映射)
SQL DSL
集群与节点
  • 一个集群可以有一个或者多个节点
  • 节点是一个 ElasticSearch 的实例
    • 本质上就是一个 JAVA 进程
    • 一台机器上可以运行多个 ElasticSearch 进程,但是生产环境一般建议一台机器上只运行一个 ElasticSearch 实例
  • 每一个节点都有名词,可以通过配置文件或者或者启动时 -E node.name 参数指定
  • 每一个节点在启动之后,会分配一个 UID,保存在 data 目录下
Master-eligible nodes 和 Master Node
  • 每个节点启动后,默认就是一个 Master eligible 节点
    • node.master: false禁止,默认true
  • Master-eligible 节点可以参加选主流程,成为Master节点
  • 当第一个节点启动时,它会将自己选举成功Master节点
  • 每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息
    • 集群状态(Cluster State),维护了一个集群中必要的信息
      • 所有的节点信息
      • 所有的索引的其相关的 Mapping 与 Setting 信息
      • 分片的路由信息
    • 任意节点都能修改信息会破坏数据的一致性
Data Node 和 Coordinating Node
  • Data Node:可以保存数据的节点称作Data Node。该节点负责保存分片数据,在数据扩展上起到了至关重要的作用
    • node.data配置项,默认true
  • Coordinating Node
    • 负责接受 Client 的请求,将请求分发到合适的节点,最终把结果汇集到一起
    • 每个节点默认都起到了 Coordinating Node 职责
其他的节点类型
  • Hot/Warm Node:不同硬件配置的 Data Node,用来实现 Hot & Warm 架构,降低集群部署的成本
  • Machine Learning Node:负责跑机器学习的Job,用来做异常检测
  • Tribe Node:Tribe Node 连接到不同的 ES 集群,并且支持将这些集群作为一个单独的集群处理。5.3版本后开始使用Cross Cluster Search
分片(Primary Shard & Replica Shard)
  • 主分片:用来解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上
    • 一个分片是一个运行的 Lucene 实例
    • 主分片数在索引创建时指定,后续不允许修改,除非 Reindex
  • 副本:用来解决数据高可用的问题。副本分片时主分片的拷贝
    • 副本分片数,可以动态调整
    • 增加副本数,可以在一定程序上提高服务的可用性(增加读取的吞吐量)
  • 生产环境中分片的设定,需要提前做好容量规划
    • 分片数设置过小
      • 导致后续无法增加节点实现水平扩展
      • 单格分片的数据量太大,导致数据重新分片耗时
    • 分片数设置过大
      • 影响搜索结果的相关性打分,影响统计结果的准确性
      • 单格节点上设置过多的分片,会导致资源浪费,同时也会影响性能
posted @ 2020-05-13 20:29  天盛  阅读(235)  评论(0编辑  收藏  举报