Teng's blog Teng's blog
首页
Java
H5前端
GitHub (opens new window)
首页
Java
H5前端
GitHub (opens new window)
  • 认知

  • 入门

  • 环境

  • 进阶

    • 核心概念
      • 索引 index
      • 类型 type
      • 文档 document
      • 字段 field
      • 映射 mapping
      • 分片 Shards
      • 副本 replicas
      • 分配 allocation
    • 系统架构
    • 单节点集群
    • 故障转移
    • 水平扩容
    • 应对故障
    • 路由计算
    • 分片控制
    • 写操作流程
    • 数据读流程
    • 更新操作流程
    • 批量操作流程
    • 倒排索引
    • 文档搜索
    • 文档刷新-刷写-合并
    • 文档分析-分词器
    • 文档控制
    • 文档展示-kibana
  • 框架集成

  • 优化

  • 面试题

  • Database-Elasticsearch
  • 进阶
Shetengteng
2022-01-29

核心概念

# 索引 index

一个索引就是一个拥有几分相似特征的文档的集合

  • 如:有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引

一个索引由一个名字来标识

  • 必须全部是小写字母
  • 通过索引名,对这个索引中的文档进行索引、搜索、更新和删除的时候

在一个集群中,可以定义任意多的索引

能搜索的数据必须索引,这样的好处是可以提高查询速度

  • 如:新华字典前面的目录就是索引的意思,目录可以提高查询速度

Elasticsearch 索引的精髓

  • 一切设计都是为了提高搜索的性能

# 类型 type

在一个索引中,可以定义一种或多种类型

  • 一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定
  • 通常会为具有一组共同字段的文档定义一个类型

不同的版本,类型发生了不同的变化

版本 Type
5.x 支持多种 type
6.x 只能有一种 type
7.x 默认不再支持自定义索引类型(默认类型为:_doc)

# 文档 document

一个文档是一个可被索引的基础信息单元,也就是一条数据

  • 如:某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档
  • 文档以 JSON格式来表示

一个 index/type 里面,可以存储任意多的文档

# 字段 field

相当于是数据表的字段,对文档数据根据不同属性进行的分类标识

# 映射 mapping

mapping 是处理数据的方式和规则方面做一些限制

  • 如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的
  • 处理 ES 里面数据的一些使用规则设置
  • 按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好

# 分片 Shards

一个索引可以存储超出单个节点硬件限制的大量数据,如:

  • 一个具有 10 亿文档数据的索引占据 1TB 的磁盘空间,而任一节点都可能没有这样大的磁盘空间
  • 单个节点处理搜索请求,响应太慢

为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,每一份就称之为分片。当创建一个索引的时候,可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的索引,这个索引可以被放置到集群中的任何节点上

分片的作用

  • 允许水平分割 / 扩展你的内容容量
  • 允许在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量

Elasticsearch 管理分片的分布,它的文档的聚合和搜索请求

注意

  • 一个 Lucene索引在 Elasticsearch 称作分片
  • 一个Elasticsearch索引 是分片的集合
  • 当 Elasticsearch在索引中搜索时,发送查询到每一个属于索引的分片-- Lucene索引

# 副本 replicas

在网络中,失败随时都可能发生,在某个分片/节点由于某些原因处于离线状态,此时故障转移机制是非常有用的

Elasticsearch 允许创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本)。

副本的作用

  • 在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的
  • 扩展搜索量/吞吐量,搜索可以在所有的副本上并行运行

分片在创建索引的时候确定,并且创建完成后不能修改,而副本可以在索引创建之后修改

  • 每个索引可以被分成多个分片。一个索引也可以被复制 0 次(意思是没有复制)或多次
  • 一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别
  • 分片和复制的数量可在索引创建的时候指定
  • 在索引创建之后,可以在任何时候动态地改变副本的数量,但是事后不能改变分片的数量

默认Elasticsearch 中的每个索引被分片 1 个主分片和 1 个副本

  • 如果集群至少有两个节点,索引将会有 1 个主分片和另外 1 个复制分片(1 个完全拷贝),每个索引总共有 2 个分片

# 分配 allocation

master节点将分片分配给某个节点的过程

  • 分配主分片过程
  • 分配副本分片过程,包含了从主分片复制数据的过程
Last Updated: 2022/02/05, 15:58:51
linux集群
系统架构

← linux集群 系统架构→

Theme by Vdoing | Copyright © 2021-2022 Shetengteng | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式