千家信息网

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

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文小编为大家详细介绍"elasticsearch元数据怎么构建metadata及routing类",内容详细,步骤清晰,细节处理妥当,希望这篇"elasticsearch元数据怎么构建metadat
千家信息网最后更新 2026年11月01日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:

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

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

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

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

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

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

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

    shardRouting,继承关系

    如下图所示:

    一个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类"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

    数据 索引 部分 方法 分析 复杂 集群 逻辑 代码 字段 内容 别名 文章 路由 对外 两个 信息 字符 字符串 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技巨头监管 圆梦互联网科技 互联网与科技金融数据 港股互联网科技股 互联网科技与金融科技 合肥互联网科技公司 奇酷互联网科技公司 艾特科技互联网 广州善班互联网科技 科技互联网创业计划书 农村开互联网科技讲堂 哈尔滨新华互联网科技学院 创业天下互联网科技有限公司 银川新华互联网科技职业技术培训学校图片 深圳市优智互联网科技有限公司 互联网科技圈年度人物 云南省自由互联网科技有限公司 互联网风格科技公司名称 互联网时代高科技布局 宁波允成互联网科技有限公司 互联网科技公司的优势 金诺互联网科技 互联网金融 科技 易互联网科技有限公司 万易互联网科技有限公司 壕鑫互联网络科技 南山科技园互联网公司有哪些 互联网媒体平台算高科技产业 锡山区互联网智能科技产品供应 萌小萌互联网科技河南有限公司
    0