elasticsearch 常用知识概念

        在应用系统需要进行文本内容检索时,这时不得不提到全文检索。而全文检索是将一个完整的信息源的全部内容转化为计算机可以识别、处理的信息单元而形成的数据集合。比较有名的全文检索软件有elasticsearch、solr等。因为elasticsearch的易用性和在大数据量时不错的性能优势,在工作中elasticsearch会使用比较多。接下来介绍下elasticsearch基本概念,包括集群、节点、索引、类型、文档和分片和副本。理解这些概念是使用好elasticsearch的第一步,后文使用ES简称elasticsearch。

     集群

        一个ES集群可以由一个或者多个节点(nodes or servers)组成。所有这些节点用来存储所有的数据以及提供联合索引,为我们提供跨节点查询的能力。一个ES集群的名称是唯一的,这个名称非常重要,因为一个节点(node)会通过这个名称来判断是否加入已有的集群。


图-ES cluster

     节点

        一个ES实例就是一个node,一个机器可以有多个实例,所以并不能说一台机器就是一个node,大多数情况下每个node运行在一个独立的环境或虚拟机上。节点用来存储数据,参与集群的索引以及提供搜索能力。当某一网络下启动一定数量的ES节点时,节点可以通过指定集群名称让它加入某个集群。

图-节点

     索引

        一个索引是一组具有相似特性的文档的集合,比如可以为客户数据(customer data)建立索引一个索引,也可以为产品目录(product catalog)建立另一个索引,还可以为订单数据(order data)建立另一个索引。一个索引由它的名称唯一标识(必须所有字母为小写字母),这个名称会在进行索引(indexing)、搜索(search)、修改(update)和删除(delete)操作的时候使用。ES中的索引类似于关系型数据库中的database,下面是关系型数据库和ES的概念关系:

图 -ES和关系型数据库概念比对

     分片和副本

     分片(shard)

        一个索引可能会存储大量数据从而超过单个节点硬件的限制。例如,单个索引可能会有上亿的文档占用1TB的磁盘空间,这对于单个节点来说太大,同时使用单个节点也会使搜索变慢。为了解决这个问题,ES提供了一种分片(shard)能力,让我们将一个索引切分成片。当我们创建一个索引时,我们可以为它指定分片的数量。每个分片自己都能独立工作,存储索引中的部分数据,相当于一桶水用了N个杯子装,而分片存在于集群的任一节点中。每个分片对应到底层都是一个Lucene Index,一个分片只能存放Integer.MAX_VALUE - 128 = 2,147,483,519 个docs。

        之所以使用分片是因为分片可以水平分割或扩展内容体量,也可以以分布式和并行的方式在多个分片上进行操作(多个节点)从而提高性能和吞吐量。而一个分片是如何散发的,如何将它的文档聚合并返回个查询是对用户透明的,这个过程完全由ES来管理。

     副本

        在网络或云的环境下,错误可以在任何时候发生,当一个分片或节点因为某种原因下线或消失时,一个错误恢复机制就非常重要。为了解决这个问题,ES让我们可以为一个索引分片创建一个或多个拷贝,这个拷贝称作副本分片,简称为副本。

        副本重要性主要体现在下面两个方面:

        1、当一个分片或者节点出错时,集群任然可用。正因如此,我们会发现一个分片副本从来不会在它的原始分片或主分片所在的节点出现。

        2、横向扩展搜索体量和吞吐量,因为搜索可以在所有副本上并行执行。

        每个索引可以分为多个分片,一个索引也可以被复制到零个或多个副本。一旦发生复制,每个索引都会有主分片(primary shards)和多个副本分片(replica shards)。分片数和副本数可以在一个索引创建时指定。当索引创建以后,可以动态的改变副本数,但是不能改变分片数。默认情况下,每个ES索引都有5个主分片(primary shards)和1个副本(replica),也就是说当我们的集群有两个节点时,我们的索引会有5个主分片和另外5个副本分片,也就是说每个索引有总共10个分片。

     总结

        本文为方便理解ES基本概念,主要介绍了集群、节点、分片和副本概念,中间也包括了ES和关系数据库概念比对,进一步加强对ES中idnexs、docs等知识理解,后续会带来ES是如何实现全文检索及其运行原理,敬请期待。       

你可能感兴趣的:(elasticsearch 常用知识概念)