返回顶部
首页 > 资讯 > 精选 >elasticsearch元数据怎么构建metadata及routing类
  • 905
分享到

elasticsearch元数据怎么构建metadata及routing类

2023-06-30 07:06:34 905人浏览 泡泡鱼
摘要

本文小编为大家详细介绍“elasticsearch元数据怎么构建metadata及routing类”,内容详细,步骤清晰,细节处理妥当,希望这篇“elasticsearch元数据怎么构建metadata及routing类”文章能帮助大家解决

本文小编为大家详细介绍“elasticsearch元数据怎么构建metadata及routing类”,内容详细,步骤清晰,细节处理妥当,希望这篇“elasticsearch元数据怎么构建metadata及routing类”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    metadata部分

    虽然在刚开始源码概述时把代码分为分布式和数据两部分,但是它们的界限并不明显。之前这几篇可以说是这两部分的衔接。我们在快速接近数据(index)部分。本篇分析一下之前分析cluster遗留下的问题:Metadata与routing,虽然这两部分的代码在cluster中,但是却直接和index相关。

    metadata部分主要是和索引相关的一些元数据构建和操作。

    元数据部分主要包括

    别名元数据(AliasMetaData):索引别名相关,将索引通过别名映射到相关的路由上;

    索引元数据(IndexMetaData):索引相关的,如shard数目replica数目, 创建时间等;

    索引模板元数据(IndexTemplateMetaData):模板相关,如预设的mapping, aliases等 ;

    mapping元数据(MappingMetadata):mapping相关的元数据,如id,routing等;

    以及RestoreMetadata和 SnapshortMetadata等。这些metadata囊括了索引相关的所有元数据,这些元数据都是集群级别,我个人认为这也是这部分放到cluster的原因。

    metadata是相关功能集群级别的配置信息,它们大都类似于数据类本身的逻辑并不复杂,都是由field和一些对field的set和get方法组成,但是它的有些field本身又是类。而且有些metadata类提供了更加复杂的数据操作方法,如MappingMetadata会有build及对于一些数据格式分析的方法。这里简单分析两个进行说明。

    下图是IndexMetadata的部分fields:

    elasticsearch元数据怎么构建metadata及routing类

    可以看到就是一些index相关的元数据,很多都是使用中必须解除到的。如Mapping等。方法上也大多是get与set,并没有太多复杂的逻辑。不同于IndexMetadata,MappingMetaData的filed则多数是内部分类,如下图所示:

    elasticsearch元数据怎么构建metadata及routing类

    这里的id,routing和timestamp字段都是内部类,因为这些字段还包含其它逻辑,无法通过基本数据类型实现。而Mapping中的关键部分内容字段映射则是一个压缩字符串(source),这是一个JSON格式的字符串。因此MappingMetadata则包含了很多更复杂的方法用来解析source。

    其它的metadata类跟着两个非常类似就不再一一说明,有兴趣的话请参考相关源码。最后来看一下MetaData相关的service,这些service对外提供了对相关MetaData读取和操作的接口。这里以MappingMetaDataService为例做个简单的说明,它的类图如下所示:

    elasticsearch元数据怎么构建metadata及routing类

    MappingMetaDataService对外提供了MappingMetaData的更新,移除等相关操作,这些方法涉及到了索引的相关操作,这里就不展开,在后面索引的分析中会有涉及。

    以上就metadata的相关分析,这一部分自身不涉及太复杂的逻辑,复杂的逻辑都在service中,但是因为service的方法会牵扯到Index的操作,因此这里就先简单分析,后面索引的相关分析中再来仔细说明相关方法。

    同MetaData类似,routing这一部分主要是集群中索引的路由的相关元数据,但和MetaData不同的是,这一部分有层次结构。ShardRouting是最基本元素,由它构成index的

    IndexRoutingTable,最后由IndexRoutingTable构成集群的RoutingTable。

    shardRouting,继承关系

    如下图所示:

    elasticsearch元数据怎么构建metadata及routing类

    一个Routing本质上是一个可以序列化的XContent,ImmutableShardRount中是Routing中不可变的字段及他们的set和get方法如id, version等。MutableShardRouting中主要是相关的shard操作,如重分配,primaryshard的变动等。一个shard的primary和所有的replica组成一个shardRoutingTable,它的部分代码如下所示:

    public class IndexShardRoutingTable implements Iterable<ShardRouting> {    final ShardShuffler shuffler;    final ShardId shardId;    final ShardRouting primary;    final ImmutableList<ShardRouting> primaryAsList;    final ImmutableList<ShardRouting> replicas;    final ImmutableList<ShardRouting> shards;    final ImmutableList<ShardRouting> activeShards;    final ImmutableList<ShardRouting> assignedShards;......}

    ShardRoutingTable中记录着一个shard所有状态的replica。index由多个shard组成,因此IndexRoutingTable由ShardRoutingTable组成,代码如下所示:

    public class IndexRoutingTable implements Iterable<IndexShardRoutingTable> {    private final String index;    private final ShardShuffler shuffler;    // note, we assume that when the index routing is created, ShardRoutings are created for all possible number of    // shards with state set to UNASSIGNED    private final ImmutableOpenIntMap<IndexShardRoutingTable> shards;    private final ImmutableList<ShardRouting> allShards;    private final ImmutableList<ShardRouting> allActiveShards;.......}

    最后所有的IndexRoutingTable组成了集群的RoutingTable:

    public class RoutingTable implements Iterable<IndexRoutingTable> {    public static final RoutingTable EMPTY_ROUTING_TABLE = builder().build();    private final long version;    // index to IndexRoutingTable map    private final ImmutableMap<String, IndexRoutingTable> indicesRouting;.........}

    这是indexRoutingTable这条线,另外还有一条RoutingTable,那就是nodeRoutingTable,这条RoutingTable线记录了每个节点上的shard的路由信息,由shardRouting构成nodeRoutingTable,然由NodeRoutingTable构成NodesRoutingTable(集群shardRouting)。

    同所有是其它模块一样,这些Routing的相关操作也是由service对外提供,另外这一部分还有以下shard操作的相关类如ShardIterator,ShardShuffle等。

    读到这里,这篇“elasticsearch元数据怎么构建metadata及routing类”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

    --结束END--

    本文标题: elasticsearch元数据怎么构建metadata及routing类

    本文链接: https://lsjlt.com/news/327790.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • elasticsearch元数据怎么构建metadata及routing类
      本文小编为大家详细介绍“elasticsearch元数据怎么构建metadata及routing类”,内容详细,步骤清晰,细节处理妥当,希望这篇“elasticsearch元数据怎么构建metadata及routing类”文章能帮助大家解决...
      99+
      2023-06-30
    • elasticsearch元数据构建metadata及routing类源码分析
      目录metadata部分元数据部分主要包括shardRouting,继承关系总结metadata部分 虽然在刚开始源码概述时把代码分为分布式和数据两部分,但是它们的界限并不明显。之前...
      99+
      2024-04-02
    • 怎么用Pandas构建数据
      本文小编为大家详细介绍“怎么用Pandas构建数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Pandas构建数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。构建数据本案例中用的数据是小编自行模拟的,...
      99+
      2023-06-29
    • 在matlab中怎么创建类似字典的数据结构
      本篇内容介绍了“在matlab中怎么创建类似字典的数据结构”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!matlab中创建类似字典的数据结构...
      99+
      2023-07-05
    • 数据结构可视化网站怎么构建
      要构建一个数据结构可视化网站,可以按照以下步骤进行:1. 确定网站的目标和功能:确定网站要展示的数据结构种类、展示方式、交互方式等。...
      99+
      2023-06-13
      数据结构可视化网站
    • oracle怎么复制表结构及数据
      Oracle数据库中,可以使用以下两种方式复制表结构及数据: 使用CREATE TABLE AS SELECT语句:这种方...
      99+
      2024-04-09
      oracle
    • C++类、对象、构造函数及析构函数怎么定义使用
      这篇文章主要介绍“C++类、对象、构造函数及析构函数怎么定义使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++类、对象、构造函数及析构函数怎么定义使用”文章能帮助大家解决问题。C++类与对象C...
      99+
      2023-07-06
    • NoSQL数据库中怎么构建索引
      在NoSQL数据库中建立索引可以提高查询性能和数据访问速度。通常情况下,NoSQL数据库会根据指定的字段或属性来建立索引。以下是一些...
      99+
      2024-05-07
      NoSQL
    • Python数据结构与算法中的栈怎么构建
      本篇内容主要讲解“Python数据结构与算法中的栈怎么构建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python数据结构与算法中的栈怎么构建”吧!什么是栈栈有时也被称作“下推栈”。它是有序集...
      99+
      2023-06-29
    • 怎么在MySQL中构建数据表索引
      本篇文章给大家分享的是有关怎么在MySQL中构建数据表索引,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。支持多种类型的过滤现在我们需要看看哪些列的值比较分散以及哪些列在WHER...
      99+
      2023-06-15
    • mysql创建表数据类型怎么用
      在 mysql 中创建表时,需要指定列的数据类型以定义其存储的数据类型和格式。常见数据类型包括整数、浮点数、字符、日期和时间以及布尔类型,选择合适的数据类型影响着数据存储大小、值范围、性...
      99+
      2024-04-22
      mysql
    • C#怎么实现数组元素的数据类型转换
      这篇文章主要介绍“C#怎么实现数组元素的数据类型转换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#怎么实现数组元素的数据类型转换”文章能帮助大家解决问题。一、场景假设假设有一串字符串如下所示,字...
      99+
      2023-06-30
    • SpringBoot中怎么利用AOP构建多数据源
      SpringBoot中怎么利用AOP构建多数据源,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。当在业务层需要涉及到查询多种同数据库的场景下,我们通常需要在执行sql的时候动...
      99+
      2023-06-16
    • JavaScript数据结构之散列表怎么创建
      本文小编为大家详细介绍“JavaScript数据结构之散列表怎么创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript数据结构之散列表怎么创建”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、处...
      99+
      2023-06-30
    • sql怎么创建自定义数据类型
      在 SQL 中,创建自定义数据类型可以使用 `CREATE TYPE` 语句。以下是一个示例:```sqlCREATE TYPE e...
      99+
      2023-09-25
      sql
    • mysql怎么复制表结构及数据到新表
      本篇内容主要讲解“mysql怎么复制表结构及数据到新表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql怎么复制表结构及数据到新表”吧!复制表结构及数据到新表CREATE TABLE 新表...
      99+
      2023-06-02
    • 怎么使用ADO.NET Entity Framework构建数据访问层
      这篇文章主要介绍“怎么使用ADO.NET Entity Framework构建数据访问层”,在日常操作中,相信很多人在怎么使用ADO.NET Entity Framework构建数据访问层问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
      99+
      2023-06-17
    • sqlserver创建表时怎么选择数据类型
      在SQL Server中,创建表时选择数据类型需要根据要存储的数据类型而定。以下是一些常用的数据类型及其用途: INT:用于存储整...
      99+
      2024-04-09
      sqlserver
    • Redis常用数据结构有哪些及怎么实现
      这篇文章主要介绍“Redis常用数据结构有哪些及怎么实现”,在日常操作中,相信很多人在Redis常用数据结构有哪些及怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Re...
      99+
      2022-12-28
      redis
    • ECMAScript的数据类型有哪些及怎么使用
      这篇“ECMAScript的数据类型有哪些及怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ECMAScript的数据...
      99+
      2023-06-30
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作