什么是ElasticSearch?
Elasticsearch 是一个分布的式开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。
可以在承载了pb级数据的成百上千的服务器上运行
具有横向扩展性,高可用性,使用简单的特点
ElasticSearch的使用方式有哪些?
搜索引擎(主要功能)
分析框架(强大的聚合功能)
数据存储,主要是日志
ElasticSearch和sql的区别
ElasticSearch的容器是索引,可以理解为数据库。ElasticSearch的mapping定义了数据类型,sql的数据类型是表结构定义。ElasticSearch的字段是sql的列,文档是sql的行。
为了管理大量数据,ElasticSearch的索引通常拆分成多个分片,分布在多个节点。
ElasticSearch的相关概念
近实时性
ElasticSearch具有近实时性,搜索时可能会有延迟,一般是1秒
集群
搭建集群的优势
高可用性。
健康状态。
存储空间。
如果 Elasticsearch 只放在一台服务器上,假如这台主机突然断网了或者被攻击了,那么整个 Elasticsearch 的服务就不可用了。但如果改成 Elasticsearch 集群的话,有一台主机宕机了,还有其他的主机可以支撑,这样就仍然可以保证服务是可用的。一台主机宕机了,这台主机里面存的数据依然是可以被访问到的,因为在其他的主机上也有备份,但备份的时候也不是整台主机备份,是分片备份的。索引的不同分片存储在不同的主机上,分片的副本也尽可能存在不同的主机上,这样可以提高容错率,从而提高高可用性。如果只有一台主机,分片和副本其实是没意义的,一台主机挂掉了,就全挂掉了。
集群的结构
多台主机构成了一个集群,每台主机称作一个节点(Node)。
节点
节点是单个Elasticsearch的实例, 用于存储数据、 参与集群索引与搜索等功能。默认情况下, 节点的名称是在节点启动时生成的随机通用唯一标识符。
索引
索引相当于数据库
Mapping
每个index都有一个mapping, mapping可以被自定义,也可以是默认第一条被创建的数据结构
类型
type用于index的逻辑分区,一个index不能创建多个type
文档
文档是能被index的基本信息单元,文档由字段组成,类似数据库中的一行记录
分片
分片 Shard,就是对数据切分成了多个部分。我们知道 Elasticsearch 中一个索引(Index)相当于是一个数据库。但索引存储的时候并不是整个存一起的,它是被分片存储的,Elasticsearch 默认会把一个索引分成五个分片。分片是数据的容器,数据保存在分片内,分片又被分配到集群内的各个节点里。当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里,所以相当于一份数据被分成了多份并保存在不同的主机上。
副本
副本Replica,就是对原分片的复制,和原分片的内容是一样的,Elasticsearch 默认会生成一份副本,所以相当于是五个原分片和五个分片副本,相当于一份数据存了两份,并分了十个分片,当然副本的数量也是可以自定义的。这时我们只需要将某个分片的副本存在另外一台主机上,这样当某台主机宕机了,我们依然还可以从另外一台主机的副本中找到对应的数据。所以从外部来看,数据结果是没有任何区别的。