|NO.Z.00005|——————————|BigDataEnd|——|Hadoop&ElasticSearch.V05|——|ELK.v05|架构|ElasticSearch架构图及基本概念|
一、ElasticSearch架构图以及基本概念(术语)
### --- 概述
~~~ Elasticsearch是面向文档(document oriented)的,
~~~ 这意味着它可以存储整个对象或文档(document)。
~~~ 然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。
~~~ 在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
~~~ Elasticsearch是基于Lucene的全文检索引擎,本质也是存储和检索数据。
~~~ ES中的很多概念与MySQL类似 我们可以按照关系型数据库的经验去理解
### --- 索引(index)
~~~ 类似的数据放在一个索引,非类似的数据放不同索引, 一个索引也可以理解成一个关系型数据库。
### --- 类型(type)
~~~ 代表document属于index中的哪个类别(type)也有一种说法一种type就像是数据库的表,
~~~ 比如dept表,user表。
~~~ 注意ES每个大版本之间区别很大:
~~~ ES 5.x中一个index可以有多种type。 ES 6.x中一个index只能有一种type。
~~~ ES 7.x以后 要逐渐移除type这个概念。
### --- 映射(mapping)
~~~ mapping定义了每个字段的类型等信息。相当于关系型数据库中的表结构。
~~~ # 常用数据类型:
~~~ text、keyword、number、array、range、boolean、date、geo_point、ip、nested、object
### --- 字段数据类型
~~~ https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html#_multi_fields_2
二、Elasticsearch比传统关系型数据库如下:
关系型数据库(比如Mysql) | 非关系型数据库(Elasticsearch) |
数据库Databases | 索引Index |
表Table | 索引Index类型(原为Type) |
数据行Row | 文档Document |
数据列Column | 字段Field |
约束Schema | 映射Mapping |
三、Elasticsearch核心概念
### --- 索引 index
~~~ 一个索引就是一个拥有几分相似特征的文档的集合。
~~~ 比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。
~~~ 一个索引由一个名字来标识(必须全部是小写字母的),
~~~ 并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,
~~~ 都要使用到这个名字。在一个集群中,可以定义任意多的索引。
### --- 类型 type
~~~ 在一个索引中,你可以定义一种或多种类型。
~~~ 一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。
~~~ 通常,会为具有一组共同字段的文档定义一个类型。
~~~ 比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。
~~~ 在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,
~~~ 当然,也可以为评论数据定义另一个类型。
~~~ 高版本ES中逐渐抛弃了type的概念,会有一个默认的type:_doc
### --- 字段Field
~~~ 相当于是数据表的字段,对文档数据根据不同属性进行的分类标识
### --- 映射 mapping
~~~ mapping是处理数据的方式和规则方面做一些限制,
~~~ 如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,
~~~ 其它就是处理es里面数据的一些使用规则设置也叫做映射,
~~~ 按着最优规则处理数据对性能提高很大,
~~~ 因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。
### --- 文档 document
~~~ 一个文档是一个可被索引的基础信息单元。
~~~ 比如,你可以拥有某一个客户的文档,某一个产品的一个文档,
~~~ 当然,也可以拥有某个订单的一个文档。
~~~ 文档以JSON(Javascript Object Notation)格式来表示,
~~~ 而JSON是一个到处存在的互联网数据交互格式。
~~~ 在一个index/type里面,你可以存储任意多的文档。
~~~ 注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。
### --- 接近实时 NRT
~~~ Elasticsearch是一个接近实时的搜索平台。
~~~ 这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒以内)
三、cluster
### --- 集群(Cluster)
~~~ 一个Elasticsearch集群由多个节点(Node)组成,每个集群都有一个共同的集群名称作为标识
### --- 节点(Node)
~~~ 一个Elasticsearch实例即一个Node,一台机器可以有多个实例,
~~~ 正常使用下每个实例都应该会部署在不同的机器上。
~~~ Elasticsearch的配置文件中可以通过node.master、node.data来设置节点类型。
### --- node.master:
~~~ 表示节点是否具有成为主节点的资格
~~~ true代表的是有资格竞选主节点
~~~ false代表的是没有资格竞选主节点
### --- node.data:
~~~ 表示节点是否存储数据
### --- Node节点组合
~~~ 主节点+数据节点(master+data) 默认
~~~ 节点既有成为主节点的资格,又存储数据
~~~ node.master: true
~~~ node.data: true
### --- 数据节点(data)
~~~ 节点没有成为主节点的资格,不参与选举,只会存储数据
~~~ node.master: false
~~~ node.data: true
### --- 客户端节点(client)
~~~ 不会成为主节点,也不会存储数据,主要是针对海量请求的时候可以进行负载均衡
~~~ node.master: false
~~~ node.data: false
四、分片
### --- 分片
~~~ 每个索引有1个或多个分片,每个分片存储不同的数据。
~~~ 分片可分为主分片(primary shard)和复制分片(replica shard),复制分片是主分片的拷贝。
~~~ 默认每个主分片有一个复制分片,每个索引的复制分片的数量可以动态地调整,
~~~ 复制分片从不与它的主分片在同一个节点上
五、副本
### --- 副本
~~~ 这里指主分片的副本分片(主分片的拷贝)
~~~ 提高恢复能力:当主分片挂掉时,某个复制分片可以变成主分片;
~~~ 提高性能:get 和 search 请求既可以由主分片又可以由复制分片处理;
~~~ 注意:每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。
~~~ 一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)
~~~ 之别。分片和复制的数量可以在索引创建的时候指定。
~~~ 在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。
~~~ 默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,
~~~ 这意味着,如果你的集群中至少有两个节点,
~~~ 你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝)这样的话每个索引总共就有10个分片。
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv025-elk
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)