新栋BOOK教你学elasticsearch(一)-基本概念

1、首先必需要掌握如下4个数据结构的基本概念。node

一、索引(index)数据库

咱们已经有了关系型数据库的基础,如今能够用类比理解。elasticsearch的索引,你就能够理解为是一张表。记住这里的‘索引’是名词。后续咱们操做的时候,好比咱们把一条数据索引发来,就是指动词。json

二、文档(document)服务器

一样用类比理解,文档是传统关系型数据表中的一条记录。也就是elasticsearch存储的主要实体。数据结构

三、文档类型app

就是指这条记录,也即这个文档是什么类型的。好比 User类型、Order类型。这里的类型是指业务类型。毕竟你存的都是业务上面的数据实体。同一个索引里面能够包含不一样的文档类型,好比下面这里的post帖子,user用户,就是存储在一个索引里面的两种类型。post和user两种类型的字段个数能够不相同,可是若是两种类型里面含有相同的字段名称,好比name,那么这个name的字段类型必须一致,即都必须为string类型。elasticsearch

1. {
  2.   "mappings":{
  3.     "post":{
  4.       "properties":{
  5.         "id":{"type":"long","store":"yes"},
  6.         "name":{"type":"string","store":"yes"},
  7.         "content":{"type":"string","store":"no"}
  8.       }
  9.     },
  10.     "user":{
  11.       "properties":{
  12.         "id":{"type":"long","store":"yes"},
  13.         "name":{"type":"string","store":"yes"},
  14.         "age":{"type":"integer","store":"no"}
  15.       }
  16.     }
  17.   }
  18. }
  1.  

四、映射(mapping)post

就是数据结构,好比建立传统关系型数据库表的时候,要有一份表结构描述的文本。就是指这个。映射可以让elasticsearch知道如何处理文档。例如上面的mapping描述,告诉es要如何对待这些文档。code

 

2、其次,再掌握elasticsearch集群相关的基本概念索引

一、节点(node)

就是指集群(cluster)中的每一个独立的服务器。

二、分片(shard)

一个索引的数据,散落在不一样的分片上。这些分片分别在不一样的节点上。数据量大,处理能力不足,没法快速响应客户端的请求,一个节点不够,就会涉及到分片。

三、副本(replica)

一个分片的精确复制。每一个分片能够有零个或多个副本。副本,或者叫作副本分片,那么也就对应有一个主分片,主分片负责索引的操做。

1. "settings": {
  2.     "number_of_shards": "32",
  3.     "number_of_replicas": "1"
  4.   },

 

上面这段定义,表明有32个分片,每一个分片有1个副本。以下图:

另外集群中Index TPS,Search TPS与副本数的关系,以下:

集群写入文档TPS与副本数正相关,查询TPS与副本数无关。

举例:

1分钟向集群写入1000个文档:

       当索引有0个副本:集群写入文档次数为1000,Index TPS为1000/60.

       当索引有1个副本:集群写入文档次数为2000,Index TPS为2000/60.

       当索引有2个副本:集群写入文档次数为3000,Index TPS为3000/60.

1分钟查询1000次:

       当索引有0个副本:search TPS为 1000/60.

       当索引有1个副本:search TPS为 1000/60.

 

副本的数量(number_of_replicas)在建立索引以后,在集群里面是能够调整的。只要你愿意,同时资源又充足的条件下,你能够删除和添加副本。可是分片的数量(number_of_shards),就不能这样来操做了。一旦建立好索引,再想更改分片数量,只有一个办法,那就是建立另外一个索引,并从新索引数据。

相关文章
相关标签/搜索