ElasticSearch核心概念讲解

目录

1、es的前世今生

2、es的核心概念

3、es与数据库的对比


1、es的前世今生

Lucene 是最先进的,功能最强大的搜索库,但是直接基于Lucene开发十分复杂,api非常复杂,体现在实现一个简单的功能要实现大量的代码,而且需要我们深入理解其底层原理,比如各种索引结构等;

ElasticSearch : 基于Lucene进行封装,一定程度上隐藏了复杂性,提供了简单的api接口,如Java Api restful Api等;

  1. 分布式文档存储引擎
  2. 分布式的搜索引擎和分析引擎
  3. 分布式,支持PB级别的数据近实时处理
  4. 开箱即用,优秀的默认参数,不需要任何额外的设置,完全开源

ElasticSearch的来源故事还是很有趣的,大家可以网上search一波。

2、es的核心概念

  • Near RealTime(NRT): 近实时;两个意思。第一:从写入数据到es到数据可以被搜索中间有一个小延迟,大致1秒。第二,基于es进行搜索或数据分析的时间级别大 致在秒级别;
  • Cluster : 集群 ,包含多个es节点,每一个简单属于那个集群是通过配置的,集群名称默认是 elasticsearch ,对于中小型的企业,完全只部署一个es节点就可以,很正常的事情。
  • Node: 节点 ,集群中的一个节点,节点的名称是随机分配的,节点的名称很重要的,尤其是对于运维人员来说。默认节点会加入到名称为 elasticsearch 的集群,如果直接启动一个节点,那么他们会自动自称一个elasticsearch集群,当然,一个节点也可以组成一个集群。
  • Document : 文档 ,es中的最小的数据单元,一个document可以是一条数据,通常是Json格式表示的数据,每一个index的type中都可以存储多个document
Product document

{

“product_id ” :  1,

“product_name” : “牙膏”,

“product_desc” : “高效美白”

}
  •  Index :索引,包含一堆有相似结构的文档数据,比如可以是一个客户索引,商品分类索引等,一个索引会有一个索引名称。
  • Type: 类型,每个索引下面包含一个或者多个的type,type是索引下面的一个逻辑数据分类,一个type下面的document,都有field,比如,博客系列,有一个索引,可以定义用户数据type,博客数据type,评论数据type等;
  • Shard:单台机器无法存储大数据,es可以将一个索引的数据切分成多个shard,分布在多台机器上存储,有了shard就可以横向扩展,存储更多的数据,让搜索和分析等操作分不到多台计算机上去执行,提升吞吐量和性能,每一个shard都是一个lucene index
  • Replica: 任何一台服务器都可能会随时宕机或者故障,此时shard可能会丢失数据,因此可以为每一个shard建立一个副本,也就是replica,它可以在shard发生故障的时候,提供备用服务,保证数据不丢失,多个replica还可以提升操作的性能与吞吐量。Primary shard 建立索引是一次设置,默认是5个,不能修改,replica shard 也就是所说的replica,可以随时修改数量,默认一个。默认的每一个索引10个shard,5个primary shard ,5个replica shard,最小的高可用配置是2台服务器。

 

 

比如1个index的数据有3T,那么,index可以拆分成3个shard,每一个shard上面可以存放1T的数据,散落在多台服务器上面。Shard的好处,横向扩展,比如说数据又增加了1T,现在是4T的数据,我们可以重新建立一个有4个shard的索引,将数据导入进去;数据分布在多台服务器上同时分布式的执行操作,提升了吞吐量和性能。比如所有的数据存放在一台服务器上面,所有的请求都会打在一台服务期上 ,如果一台服务器处理请求的效率是2000/s,分布式存储,每秒钟可以处理8000个请求,大大的提升了吞吐量。

另外,如果3T的数据,分布式存放在3个服务器上,结果一台服务器宕机,数据丢失,可能在生产环境会对企业造成重大的损失,严重的会流失大量的用户。这个时候,replica shard就起到了作用,它相当于一个副本,在shard(primary shard)数据丢失时,提供数据支持。

另外,对于一些replica shard ,一些数据的读请求,是可以处理请求的,这个时候,吞吐量有提升了一倍,1秒钟可以处理16000个读请求。

3、es与数据库的对比

最后比较一下es和数据库:

docement就相当于表中的一条数据,Type相当于是一个数据表,Index相当以一个数据库

猜你喜欢

转载自blog.csdn.net/IBLiplus/article/details/86532964