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. }
四、映射(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),就不能这样来操做了。一旦建立好索引,再想更改分片数量,只有一个办法,那就是建立另外一个索引,并从新索引数据。