elasticsearch元数据构建metadata及routing类源码分析-亚博电竞手机版

目录

  • metadata部分
    • 元数据部分主要包括
    • shardrouting,继承关系
  • 总结

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类跟着两个非常类似www.cppcns.com就不再一一说明,有兴趣的话请参考相关源码。最后来看一下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等。

总结

本篇从结构上对metadata和routing部分进行了简单说明,这两部分连接着cluster和index。这里的说明并没有深入到方法层面,一则这里的逻辑大部分很简单,另外这些方法在后面的数据(index)部分的分析中会有涉及。

以上就是elasticsearch元数据构建metadata routing源码分析的详细内容,更多关于elasticsearch元数据构建metadata routing的资料请关注亚博电竞手机版其它相关文章!

展开全文
内容来源于互联网和用户投稿,文章中一旦含有亚博电竞手机版的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系亚博电竞手机版删除

最新文章

网站地图