zoukankan      html  css  js  c++  java
  • ES核心概念

     

     

     

     

    ES里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当于表的行。
    这里Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一个 index 下已经只能包含一个
    type Elasticsearch 7.X 中 , Type 的概念已经被删除了。

     索引:

    一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。
    能搜索的数据必须索引,这样的好处是可以提高查询速度,比如:新华字典前面的目录就是索引的意思,目录可以提高查询速度

    索引是映射类型的容器,ElasticSearch中的索引是一个非常的强大的文档集合,索引存储了映射类型的字段和其他设置,然后他们被存储到了各个分片上,我们来研究下分片是如何工作的
    物理设计:节点和分片 如何工作
    一个集群至少有一个节点,而一个节点就是一个ElasticSearch进程节点可以有多个索引默认的,如果你创建索引,那么索引会至少有5个分片(primary shard ,又称为主分片)构成的,每一个主分片会有一个副本(replica shard,又称为复制分片)

    类型(type):

    在一个索引中,你可以定义一种或多种类型。
    一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。不同的版本,类型发生了不同的变化

    类型是文档的逻辑容器,就像关系型数据库一样,表格是行的容器,类型中对于字段的定义成为映射,比如name映射为字符串类型,我们说文档是无模式的,他们不需要拥有映射中所定义的所有字段,比如新增一个字段,那么ElasticSearch是则么做的呢?
    ElasticSearch会自动的将新字段加入映射,但是这个字段的不确定他是什么类型,ElasticSearch就开始猜,如果这个值是16,那么ElasticSearch会认为它是整形,但是ElasticSearch也可能猜不对,所以最安全的方式就是提前定义好所需要的映射,这点跟关系型数据库殊途同归了,先定义好字段,然后再使用,别瞎整

    文档:
    之前说ElasticSearch是面向文档的,那么就意味着索引和搜索数据的最小单位是文档,ElasticSearch中,文档有几个重要属性:
    自我包含,一篇文档同时包含字段和对应的值,也就是同时包含Key:value
    可以是层次型的,一个文档中包含子文档,复杂的逻辑实体就是你这么来的
    灵活的结构 ,文档不依赖预先定义的模式,我们知道关系型数据库中,要先提前定义字段才能使用,在ElasticSearch中,对于字段是非常灵活的有时候,有时候我们可以忽略该字段,或者动态添加一个新字段
    尽管我们可以随意的新增和忽略某个字段,但是每个字段的类型非常重要,比如一个年龄字段类型,可以是字符串也可以是整型,因为ElasticSearch会保存字段和类型之间的映射及其他的设置,这种映射具体到每个映射的每种类型,这也是为什么在ElasticSearch中,类型有时候也称为映射类型
    字段(Filed):
    相当于是数据表的字段,对文档数据根据不同属性进行的分类标识。

    映射(mapping):

    mapping是处理数据的方式和规则方面做一些限制,如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的,其它就是处理ES里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。

    分片(Shards):

    一个索引可以存储超出单个节点硬件限制的大量数据。比如,一个具有10亿文档数据的索引占据1TB的磁盘空间,而任一节点都可能没有这样大的磁盘空间。或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,每一份就称之为分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。
    分片很重要,主要有两方面的原因:
    1)允许你水平分割 / 扩展你的内容容量。
    2)允许你在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量。
    至于一个分片怎样分布,它的文档怎样聚合和搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的,无需过分关心。
    被混淆的概念是,一个 Lucene 索引 我们在 Elasticsearch 称作 分片 。 一个 Elasticsearch 索引 是分片的集合。 当 Elasticsearch 在索引中搜索的时候, 他发送查询到每一个属于索引的分片(Lucene 索引),然后合并每个分片的结果到一个全局的结果集。

    副本( Replicas):

    在一个网络 / 云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本)。
    复制分片之所以重要,有两个主要原因:
     在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
     扩展你的搜索量/吞吐量,因为搜索可以在所有的副本上并行运行。

    总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。默认情况下,Elasticsearch中的每个索引被分片1个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有1个主分片和另外1个复制分片(1个完全拷贝),这样的话每个索引总共就有2个分片,我们需要根据索引需要确定分片个数。

  • 相关阅读:
    Windows下Jupyter notebook 更改工作目录
    AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas
    python中sorted函数
    U3d学习001-RollBox例子
    猴哥来了-游戏开发记录17-微信排行榜bug
    写在自己40岁生日,勉励自己,再度出发!
    python网页爬虫开发之一
    python学习笔记之二
    python学习笔记之一
    conda和pip环境管理
  • 原文地址:https://www.cnblogs.com/danyuzhu11/p/15429513.html
Copyright © 2011-2022 走看看