C/C++教程

ElasticSearch结构

本文主要是介绍ElasticSearch结构,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Elasticsearch是一种文档性存储结构,由上到下依次可分为:

cluster(集群)→node(节点)→shard(分片)/replica(副本)→index(索引)→type(类型)→document(文档)→field(属性)

一个Elasticsearch集群可以 包含多个节点,每个节点包含多个分片,每个分片包含多个索引 ,相应的每个索引可以包含多个类型 。 这些不同的类型存储着多个文档 ,每个文档又有 多个属性

索引 这个词在 Elasticsearch 语境中有多种含义, 这里有必要做一些说明:

索引(名词):

如前所述,一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方。 索引 (index) 的复数词为 indicesindexes

索引(动词):

索引一个文档 就是存储一个文档到一个 索引 (名词)中以便被检索和查询。这非常类似于 SQL 语句中的 INSERT 关键词,除了文档已存在时,新文档会替换旧文档情况之外。

倒排索引:

关系型数据库通过增加一个 索引 比如一个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的。

  • 集群

    ES可以作为一个独立的单个搜索服务器,不过为了处理大数据集,实现容错和高可用,ES可以运行在多台相互合作的服务器上。这些服务器的集合称为集群。

  • 节点

    运行了单个实例的ES主机称为节点,他是集群的一个成员,可以参与数据存储、集群索引及搜索工作。节点通过为其配置的集群名称来确定加入的集群。

  • 分片

    ES的分片机制,可以将一个索引内部的数据分布的存储在多个节点上。它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每个物理的Lucene索引称为分片。

    这样可以把一个大的索引拆分成多分,分不到不同的节点上。减低单个服务器的压力。同时,构成分布式搜索,提高整体检索的效率。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

  • 副本

    副本是一个分片的精确复制,每个分片可以有多个副本。副本的作用一是提高系统的容错性,当某个分片损坏或者丢失时,可以从副本中回复。二是提高ES的查询效率,ES会自动对搜索请求进行负载均衡。


    数据架构

  • 索引

    ES将数据存储于索引中,索引时具有类似特性的文档的集合。

    索引相当于关系型数据库中的数据库。

  • 类型

    类型是索引内部的逻辑分区,一个索引内部可以定义一个或多个类型。

    类型可类比于关系型数据库中的表。

    PS:ES5.0中,一个索引中可定义多个类型;ES6.0以上只能定义一个;ES7.0中开始弃用,但一个索引中还是可以定义一个类型。ES8.0将完全删除类型。

  • 文档

    文档是Lucene索引和搜索的原子单位,它是包含一个或多个域的容器,基于JSON格式进行表示。

    可类比于关系型数据库中的行。

  • 属性

    属性是对文档中每个值的描述。

    相当于关系行数据库中的列。

这篇关于ElasticSearch结构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!