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
    • 副本:用来解决数据高可用的问题。副本分片时主分片的拷贝
      • 副本分片数,可以动态调整
      • 增加副本数,可以在一定程序上提高服务的可用性(增加读取的吞吐量)
    • 生产环境中分片的设定,需要提前做好容量规划
      • 分片数设置过小
        • 导致后续无法增加节点实现水平扩展
        • 单格分片的数据量太大,导致数据重新分片耗时
      • 分片数设置过大
        • 影响搜索结果的相关性打分,影响统计结果的准确性
        • 单格节点上设置过多的分片,会导致资源浪费,同时也会影响性能
  • 相关阅读:
    PHPCMS实现文章置顶功能的方法
    phpcms v9栏目列表调用每一篇文章内容方法1
    phpcms v9使用GET调用指定id文章内容、页面数据方法
    PHPCMS GET标签使用
    PHPCMS栏目调用2
    PHPCMS二层栏目调用
    PHPCMS get当中使用limit
    phpcms栏目调用
    WAMP学习日记之:Apache发布php网站
    用Apache实现一个ip虚拟多个web站点
  • 原文地址:https://www.cnblogs.com/gongjunbing/p/12884710.html
Copyright © 2011-2022 走看看