elasticsearch的核心概念、分布式特性
1、lucene和elasticsearch的前世今生
lucene,最先进、功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理解原理(各种索引结构)
elasticsearch,基于lucene,隐藏复杂性,提供简单易用的restful api接口、java api接口(还有其他语言的api接口)
(1)分布式的文档存储引擎
(2)分布式的搜索引擎和分析引擎
(3)分布式,支持PB级数据
开箱即用,优秀的默认参数,不需要任何额外设置,完全开源
关于elasticsearch的一个传说,有一个程序员失业了,陪着自己老婆去英国伦敦学习厨师课程。程序员在失业期间想给老婆写一个菜谱搜索引擎,觉得lucene实在太复杂了,就开发了一个封装了lucene的开源项目,compass。后来程序员找到了工作,是做分布式的高性能项目的,觉得compass不够,就写了elasticsearch,让lucene变成分布式的系统。
2、elasticsearch的核心概念
Elasticsearch是什么
Elasticsearch是一个基于Lucene搜索引擎为核心构建的开源,分布式,RESTful搜索服务器。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便,轻松扩展服务节点。
Elasticsearch是用Java开发的,但它却不是只支持Java语言,因为它支持RESTful方式调用,那理论上它是支持所有开发语言的,除此之外,如果你不想使用RESTful方式调用Elasticsearch服务器,那Elasticsearch还提供了各种语言的api供我们使用。
我们通过以下这张分析图来看看elasticsearch是如何工作的:
ES服务器工作示意图.png
相关概念
接近实时(NRT):
Elasticsearch 是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个很小的延迟,包括如果做了集群的话,集群中的各个节点数据同步也是接近实时的。
集群(cluster):
elasticsearch一个很大的优势是它可以很方便的做集群,在一个elasticsearch的集群中,有很多的节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。
节点(node):
节点(node)其实就是一个elasticsearch服务器的实例,节点(node)主要有3种类型,第一种类型是client_node,主要是起到请求分发的作用,类似路由。第二种类型是master_node,是主的节点,所有的新增,删除,数据分片都是由主节点操作(elasticsearch底层是没有更新数据操作的,上层对外提供的更新实际上是删除了再新增),当然也能承担搜索操作。第三种类型是date_node,该类型的节点只能做搜索操作,具体会分配到哪个date_node,就是由client_node决定,而data_node的数据都是从master_node同步过来的。
索引(index):
ElasticSearch将它的数据存储在一个或多个索引(index)中。用SQL领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档。
文档类型(type):
文档类型(type)是用来规定文档的各个字段内容的数据类型和其他的一些约束,相当于关系型数据库中的表,一个索引(index)可以有多个文档类型(type)。
文档(document):
在Elasticsearch中,文档(document)是存储数据的载体,包含一个或多个字段。一个文档(document)相当于关系型数据库中的一行数据。
这些就是elasticsearch的一些比较重要的概念,还有其他的概念我们就不一一列举了,但是大家通过以上的概念可能发现,elasticsearch的设计跟关系型数据库的设计还是挺像的,我们可以通过关系型数据库的概念来类比着学习elasticsearch,所以来看看以下这张对比图:
MySQL和elasticsearch概念对比.png
核心原理:
最后给你们贴个图以便于理解:此图原创作者中华石山如有侵权请尽快通知
上一篇: mysql按时间分段统计数据
下一篇: 如何解决Mysql中中文乱码的问题