目录
1.Elasticsearch的由来
2.ElasticSearch的定义
3.ElasticSearch的概念
4.关系型数据库和ElasticSearch中的对应关系
1.Elasticsearch的由来
许多年前,一个叫Shay Banon的待业工程师跟随他的新婚妻子来到伦敦,他的妻子想在伦敦学习做一名厨师。而他在伦敦寻找工作的期间,接触到了Lucene的早期版本,他想为自己的妻子开发一个方便搜索菜谱的应用。直接使用Lucene构建搜索会有很多的坑以及重复性的工作,所以Shay便在Lucene的基础上不断进行抽象来让Java程序嵌入搜索变得更容易一些,经过一段时间的打磨,就诞生了他的第一个开源作品,他给自己的这个作品起了个名字,叫 “Compass”,中文即“指南针”的意思。之后,Shay找到了一份新工作,新工作是处在一个高性能分布式的开发环境中。他在工作中渐渐发现,越来越需要一个易用的高性能、实时、分布式搜索服务,于是他决定重写Compass,将它从一个库打造成了一个独立的server,并将其改名为Elasticsearch。Elasticsearch发布的第1个版本是在2010年的2月份,从那之后,Elasticsearch便成了Github上最受人瞩目的项目之一,并且很快就有超过300名开发者加入进来贡献了自己的代码。后来Shay和另一位合伙人成立了公司专注打造Elasticsearch,他们对Elasticsearch进行了一些商业化的包装和支持。但是,Elasticsearch承诺,永远都将是开源并且免费的。
2.ElasticSearch的定义
ElasticSearch是使用Java语言,基于Lucene开发的一个分布式的、高扩展性的、高实时性的、支持PB级数据存储的搜索和数据分析引擎,以优雅的RestfulAPI的方式供外部调用,避免了原来繁琐复杂的Lucene的操作。它能够很方便的使大量数据具有搜索、分析和探索的能力。充分利用ElasticSearch的水平伸缩性,能使数据库在生产环境变得更有价值。而且Elasticsearch在Apache 2 license下许可使用,可以免费下载、使用和修改。
3.ElasticSearch的概念
1. 节点(Node)和集群(Cluster)
集群是一个或多个节点(服务器)的集合, 这些节点共同保存整个数据,并在所有节点上提供联合索引和搜索功能。一个集群由一个唯一集群ID确定,并指定一个集群名(默认为“elasticsearch”)。该集群名非常重要,因为节点可以通过这个集群名加入集群,一个节点只能是集群的一部分。
2. Index(索引)
索引(index)类似于关系型数据库里的“数据库”——它是我们存储和索引关联数据的地方。索引名称必须是全部小写,不能以下划线开头,不能包含逗号。
3. Type(类型)
在索引中,我们可以定义一个或多个类型。类型是索引的逻辑类别/分区,其语义完全由开发者决定。通常,为具有一组公共字段的文档定义类型。例如,假设开发者运行博客平台并将所有数据存储在一个索引中。在此索引中,我们可以为用户数据定义类型,为博客数据定义另一种类型,并为注释数据定义另一种类型。我们可以把索引理解成数据库文档中的表。
4. Document(文档)
文档是可索引信息的基本单元,以JSON表示。你可以用其来定义单个产品信息或是员工信息。我们可以把文档理解为数据库文档中的行列数据。在索引/类型中,您可以存储任意数量的文档。文档有几个共同不可缺的属性,分别为 _index, _type, _id, 针对特定一个或一类文档进行操作时,必须指定这些属性。
5. Mapping(映射)
模式映射(schema mapping,或简称映射)用于定义索引结构。Elasticsearch在映射中存储有关字段的信息。映射在文件中以JSON对象传送。
6. Field(字段)
ElasticSearch里的最小单元 相当于数据的某一列,类似于json里一个键。
7. Shards(分片)
当有大量的文档时,由于内存的限制、硬盘能力、处理能力不足、无法足够快地响应客户端请求等,一个节点可能不够。在这种情况下,数据可以分为较小的称为分片(shard)的部分(其中每个分片都是一个独立的Apache Lucene索引)。每个分片可以放在不同的服务器上,因此,数据可以在集群的节点中传播。
当你查询的索引分布在多个分片上时,Elasticsearch会把查询发送给每个相关的分片,并将结果合并在一起。此外,多个分片可以加快索引。
8. Replica(副本)
为了提高查询吞吐量或实现高可用性,可以使用分片副本。副本(replica)只是一个分片的精确复制,每个分片可以有零个或多个副本。换句话说,Elasticsearch可以有许多相同的分片,其中之一被自动选择去更改索引操作。这种特殊的分片称为主分片(primary shard),其余称为副本分片(replica shard)。在主分片丢失时,例如该分片数据所在服务器不可用,集群将副本提升为新的主分片。
4.关系型数据库和ElasticSearch中的对应关系
关系型数据库 | Elasticsearch |
数据库Database | 索引Index,支持全文检索 |
表Table | 类型Type |
数据行Row | 文档Document,但不需要固定结构,不同文档可以具有不同字段集合 |
数据列Column | 字段Field |
模式Schema | 映射Mapping |