学习Elasticsearch就是为了解决大数据量的问题,无论是存储、查询、高可用等等问题都可以使用Elasticsearch来进行处理,因此Elasticsearch也可以变相的理解为非关系型数据库,因为它没表、没有所谓的关系,说白了还是存数据的
Elasticsearch可以搭建集群
倒排索引: 根据数据查询id(如:Elasticsearch根据分词查询,他会根据关键字去分词区查询关键字对应的数据的id,在根据id去文档区查询具体数据)
Elasticsearch结构:
对应的含义:
## 4.1 索引(index)
索引是ElasticSearch存放数据的地方,可以理解为关系型数据库中的一个数据库。事实上,我们的数据被存储和索引在分片(shards)中,索引只是一个把一个或多个分片分组在一起的逻辑空间。然而,这只是一些内部细节——我们的程序完全不用关心分片。对于我们的程序而言,文档存储在索引(index)中。剩下的细节由Elasticsearch关心既可。<font color=red>(索引的名字必须是全部小写,不能以下划线开头,不能包含逗号)</font>
## 4.2 类型(type)
类型用于区分同一个索引下不同的数据类型,相当于关系型数据库中的表。在Elasticsearch中,我们使用相同类型(type)的文档表示相同的“事物”,因为他们的数据结构也是相同的。每个类型(type)都有自己的映射(mapping)或者结构定义,就像传统数据库表中的列一样。所有类型下的文档被存储在同一个索引下,但是类型的映射(mapping)会告诉Elasticsearch不同的文档如何被索引。
<font color=red>es 6.0 开始不推荐一个index下多个type的模式,并且会在 7.0 中完全移除。在 6.0 的index下是无法创建多个type</font>
## 4.3 文档(documents)
文档是ElasticSearch中存储的实体,类比关系型数据库,每个文档相当于数据库表中的一行数据。 在Elasticsearch中,文档(document)这个术语有着特殊含义。它特指最顶层结构或者根对象(root object)序列化成的JSON数据(以唯一ID标识并存储于Elasticsearch中)。
## 4.4 字段(fields)
文档由字段组成,相当于关系数据库中列的属性,不同的是ES的不同文档可以具有不同的字段集合。
结构图介绍:一个Elasticsearch就是一个node(这里指的应该是根节点,因为一个Elasticsearch只有一个根节点,但有其他很多普通节点,本文中说的节点都是根节点),而一个node下又有多个shards即分片,分片中指定的是一些索引中的数据,索引下又放着多个类型,类型下又存放着对应类型的数据。
为什么说一个Elasticsearch就是一个node:因为当只有一个elasticsearch时,在备份时,备份不存在,是灰色的,当只有一个节点时才会出现这种状况。
Elasticsearch结构与mysql数据库联想记忆:node相当于mysql服务器,shards相当于mysql中的全部数据库,index就相当于mysql中的一个数据库,type相当于mysql中的表,document相当于表中的一行数据
当有多个elasticsearch时,备份分配大致情况图:
这种分片方式es会自动分
1. 索引. index
索引就相当于关系型数据库中的一个数据库.
一个项目的开始是创建数据库,而一个ElasticSearch的开始时创建一个索引
一个索引下可以有多个类型. 一个数据库下可以有多张表
2. 类型. type
类型就相当于关系表.
在es的5.x版本中,一个索引可以创建多个类型.
在es的6.x版本中,一个索引只能创建一个类型.
在es的7.x版本中,类型已经被完全移除.
在类型中指定文档存储数据的结构.
3. 文档. doc
文档想到于关系表中的一行数据.
一行数据可能是结构化数据,也可能是非结构化数据.
结构化数据比较多.
包含field -> 列
4. 分片. shards
分片:
es一般是用于大量数据的存储,数据可能上亿条数据.分片则是用于避免数据放在一起导致每次查数据都要查询大量数据的状况发生,将数据分散到不同的分片上。
es默认将一个索引分成了5个分片,将5个分片分别存储在不同的node(即不同的es服务商)上.
将数据也分别的放在了不同的分片,查询不同的数据,去不同的分片上去检索.
备份:
es是绝对不会将备份和正在使用的数据放在同一个节点(node)上的,因为它们都在同一个节点上,一旦节点出问题就都没了,即使没节点了,也不会往一个节点上放。
就是将分片数据分别的存储在不同的node节点上,保证一台node宕机,还有全部的数据,依然可以运作.
备份在查询量特别大的时候,也可以分担查询压力.
索引、类型、文档对应的关系图:
当Elasticsearch执行查询时,它会分成一个文档区和分词区。当查询某个词时,它不会直接去文档区查,而是先到分词区查改词对应的id,在分词区查询到id后再去文档区查。