02.es介绍
# 01.ES介绍
# 1.1 ES功能
分布式的搜索引擎和数据分析引擎
数据分析:电商网站,最近7天牙膏销量排行前十商家(举例);
全文检索
,结构化检索,数据分析全文检索:我想搜索商品名称包含牙膏的商品,select * from products where product_name like “%牙膏%”
结构化检索:我想搜索商品分类为日化用品的商品都有哪些,select * from products where category_id=’日化用品’
部分匹配、自动完成、搜索纠错、搜索推荐
数据分析:我们分析每一个商品分类下有多少个商品,select category_id,count(*) from products group by category_id
对海量数据进行实时的处理
# 1.2 ES特点
可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司
Elasticsearch不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES;lucene(全文检索),商用的数据分析软件(也是有的),分布式数据库(mycat)
对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下ES,就可以作为生产环境的系统来使用了,数据量不大,操作不是太复杂
数据库的功能面对很多领域是不够用的(事务,还有各种联机事务型的操作);特殊的功能,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;Elasticsearch作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能
# 02.es核心概念
mysql | elasticsearch |
---|---|
库 | 索引 |
表 | 类型 |
数据(每一条) | 数据(每一条) |
字段 | 属性 |
# 2.1 Near Realtime(NRT)
- 近实时,一方面指从写入数据到数据可以被搜索有个小延迟(一秒左右),一方面指基于es执行搜索和分析可以达到秒级。
# 2.2 Cluster
- 集群,包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常。
# 2.3 Node
节点,集群的一个节点,节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操作的时候),默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,当然一个节点也可以组成一个elasticsearch集群。
# 2.4 Index,相当于库
索引,包含一堆有相似结构的文档数据,一个index包含很多document,一个index就代表了一类类似的或者相同的document。
# 2.5 Type,相当于表
类型,每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field,比如博客系统,有一个索引,可以定义用户数据type,博客数据type,评论数据type。
# 2.6 Document&field,相当于行
文档,es中的最小数据单元,一个document可以是一个客户数据,一条商品分类数据,一条订单数据,通常用json结构表示,每个index下的type中,都可以去存储多个document,一个document里面有多个field,每个field就是一个数据字段。
# 2.7 Shard
单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。每个shard都是一个lucene index。
# 2.8 Replica
任何一个服务器随时可能故障或宕机,此时shard可能就会丢失,因此可以为每个shard创建多个replica副本。replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。primary shard(建立索引时一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个),默认每个索引10个shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器。