基本概念
es里面有很多核心概念,从一开始了解这些概念会更有助于了解es。
准实时(NRT,near realtime)
es是一个准实时的搜索平台,这就意味当你存一条数据进去到可以搜索到中间有一定延迟(一般是一秒左右)。
集群
集群是存有数据多个节点的集合。集群用名字来作为唯一标志,默认为“elasticsearch”。集群的名字非常重要,因为一个节点只能属于一个集群。
节点
es集群的一部分,节点是用来存储数据、提供搜索请求计算的单位。es节点和es集群一样都是用名字来作为唯一标识的,es节点默认的名字是uuid。
es节点在一个网段里面是有自动发现功能的,节点启动前配置好节点要加入的集群名称,es节点就会自动加入集群。
在一个集群里面,你可以加入任意多你想添加的节点。
下面的概念不翻译成中文了,因为会和传统数据库的叫法混淆。
index
索引。索引是一组具有相同特点文档的集合。在es里面,索引是参与搜索、更新、删除的基本单位。
在一个集群里面,你可以创建任意多的索引。
在这里的索引不同于传统数据库的索引。
type
类型。在索引里面,你可以定义多个类型,类型在索引里面仅仅是一个逻辑层面的分类字段。在索引里面,你可以将里面的所有字段按照分类从逻辑层面用类型来区分。
document
文档。文档在es里面是数据存储的最基本单元。
shard&relicas(分片和副本)
es是一个分布式的系统,分布式就必须要考虑到容灾、数据丢失的容错问题。
shard(分片)
一个index是可以存储超过一台节点硬件极限的数据。为了能够让更多的数据存储在es集群里面,es能够让index打散成多个分片分布在不同的节点上从而增大index存储数据的量。这个打散的碎片就是shard分片。
每个index创建的时候都能定义分片的数量,定义好后是不能修改的。
- 分片可以水平扩展index存储的数据量
- 分片可以让计算请求分为多个并行处理。一个分片会有一个线程处理一份数据,多个分片会有多个线程来处理一个请求。
replication(副本)
分布式系统都会有副本的概念,因为数据分散的分布在不同的机器上,难免会遇到网络、死机、硬盘损坏等造成数据损坏、丢失等严重情况,所以一份数据会有多个副本保证数据的完整安全性。
这里副本实际上是分片的副本,数据在节点上以分片数据的形式存在,es通过算法使每台机器上的碎片副本保存在其它机器上,保证在down掉更多机器的情况下依然保证数据不会丢失。
- 当分片或者几点down掉之后,副本依然能够保证数据的完整性,所以分片的副本绝不会和原始分片分布在一台机器上。
- 因为搜索的时候,也会并行的在分片副本上进行,所以副本会扩大你集群搜索的吞吐量,从而加快搜索的速度
创建index的时候可以定义分片和副本的数量,副本的数量可以动态修改,分片的数量一旦定义就不能修改。
总而言之,言而总之,副本和分片数量都对index的搜索速度有影响。
分片越多,搜索的线程越多,占用的资源多,自然快,适用于数据量很大的情况。数据量很小分片很多的时候会造成资源的浪费。
副本越多,可以搜索的文件越多,会提升搜索的速度,但是副本多也会对写入速度造成影响。
所以要根据数据实际使用的场景合理设置副本和分片的数量。