elasticsearch基本概念介绍
本文主要参考:
1、https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html
2、《elasticsearch权威指南》
好,下面上货。
Near Realtime(NRT)
Elasticsearch 是一个接近实时的查询平台。它有很低的延迟(接近1秒)从你索引一个文档,到能够查询这个文档。
Cluster
集群是一个由多个节点(服务器)组成的。这些节点共同存储你的数据,并且提供一个联邦的索引和跨节点查询的能力。每一个集群有一个唯一的名字作为标识(默认情况下是elasticsearch)。这个名字很重要,因为一个节点想要成为一个集群的一员就必须设置与集群相同的名字。
必须保证在不同的环境中使用不同的集群名字,否则你的节点会join到错误的集群上。比如,你可以使用logging-dev,logging-stage和logging-prod这三个名字,分别给开发,平台和生产。
注意,只有一个节点的集群是合法的,而且,你可能会有很多独立的集群,每个集群有自己的名字。
Node
节点是集群中的一台服务器。它存储数据并且参与索引和查询。和集群类似,每一个节点在启动时都由默认的随机的UUID进行标识。你可以定义这个标识,从而不使用默认的标识。这个名字对于集群管理员来说很重要,因为这个名字标识了现实中的机器和集群中节点的对应关系。
一个节点通过配置集群名字能够被添加到一个集群中。默认情况下,一个几点会被添加到名字为elasticsearch的集群中。那也就意味着如果你在启动很多节点,而且这些节点能够在网络中相互感知的话,那么这些节点会自动的组织添加到名字为elaticsearch的集群中。
在一个单独的集群中,你可以添加很多节点。而且如果没有其他的elasticsearch 节点在你的网络中运行,启动一个节点,会自动的组成一个叫做elasticsearch的集群。
Index 索引 Type 类型 Document 文档
上面三个概念,我引用《elasticsearch权威指南》中的说法
关系数据库 | database | table | row | column |
---|---|---|---|---|
elasticsearch | index | type | document | field |
Shards&Replicas
一个索引有潜力存储大量的数据,大量的数据很快会到达单个节点的硬件极限。比如:一个索引有十亿文档,总共小号1TB的磁盘空间,那么这样就适合存储在单个节点上,而且也会造成查询缓慢的的现象。
为了解决这问题,elasticsearch提供了一个把数据细分的能力,叫做分片。当你定义一个索引的时候你可以指定分片数。每一个分片是功能独立的“索引”,可以别存储在集群中的任意一个节点上。
提供分片的两个主要原因:
1、能够水平的切分和扩展存储空间。
2、能够分布式平行的在多个分片上计算,从而提高性能和吞吐量。
分片是如何分布式存储的和文档在查询请求后如何聚合的完全由elasticsearch进行管理,对用户来说是透明的。
在网络或者集群环境中错误经常发生。有一套容错机制防止分片或者节点由于任何原因掉线或者丢失是非常有必要的。为此,elasticsearch为集群中的分片提供了一个或多个副本分片,简称副本。
提供副本的两个主要原因:
1、当分片或者节点出错时,提供高可用性。为此,最重要的是存储副本分片的位置不能再这个分片的原始节点或者主节点。
2、能够提高吞吐率,因为查询可以并行的运行在平行的副本上。
总之,每一个索引能够被切分成多个分片。一个索引能够被复制0到多次。一旦复制,每个索引就会有主分片(索引的原始分片,复制的来源地)和复制分片(从主分片复制出来的)。每个索引的副本个数能够在创建索引时指定。在创建索引之后,你可能想再次改变副本的数量,但是,一段创建了副本的数量是不能改变的。
默认情况下,elasticsearch中的索引有分片数为5,副本数为1。也就是说,如果你有一个两个节点的集群,你的索引会有5个分片,5个副本分片。每个索引有10个分片。(默认情况下)
每个elasticsearch 分片是一个Lucene索引。单独的Lucene索引有最大文档数显示,在Lucene-5843中记载,最大是2,147,483,519
(= Integer.MAX_VALUE - 128) 个文档。你可以监控分片的大小通过_cat/shards
api 。
本文来源0day__,由javajgs_com转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处