zoukankan      html  css  js  c++  java
  • 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
    • 副本:用来解决数据高可用的问题。副本分片时主分片的拷贝
      • 副本分片数,可以动态调整
      • 增加副本数,可以在一定程序上提高服务的可用性(增加读取的吞吐量)
    • 生产环境中分片的设定,需要提前做好容量规划
      • 分片数设置过小
        • 导致后续无法增加节点实现水平扩展
        • 单格分片的数据量太大,导致数据重新分片耗时
      • 分片数设置过大
        • 影响搜索结果的相关性打分,影响统计结果的准确性
        • 单格节点上设置过多的分片,会导致资源浪费,同时也会影响性能
  • 相关阅读:
    Effective Java 第三版——26. 不要使用原始类型
    Effective Java 第三版——25. 将源文件限制为单个顶级类
    Effective Java 第三版——24. 优先考虑静态成员类
    Effective Java 第三版——23. 优先使用类层次而不是标签类
    Effective Java 第三版——22. 接口仅用来定义类型
    Effective Java 第三版——21. 为后代设计接口
    Effective Java 第三版——20. 接口优于抽象类
    Effective Java 第三版——19. 如果使用继承则设计,并文档说明,否则不该使用
    Effective Java 第三版——18. 组合优于继承
    Effective Java 第三版——17. 最小化可变性
  • 原文地址:https://www.cnblogs.com/gongjunbing/p/12884710.html
Copyright © 2011-2022 走看看