亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

elasticsearch元數據構建metadata及routing類源碼分析

 更新時間:2022年04月22日 09:07:48   作者:zziawan  
這篇文章主要為大家介紹了elasticsearch元數據構建metadata?routing類內部源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

metadata部分

雖然在剛開始源碼概述時把代碼分為分布式和數據兩部分,但是它們的界限并不明顯。之前這幾篇可以說是這兩部分的銜接。我們在快速接近數據(index)部分。本篇分析一下之前分析cluster遺留下的問題:Metadata與routing,雖然這兩部分的代碼在cluster中,但是卻直接和index相關。

metadata部分主要是和索引相關的一些元數據構建和操作。

元數據部分主要包括

別名元數據(AliasMetaData):索引別名相關,將索引通過別名映射到相關的路由上;

索引元數據(IndexMetaData):索引相關的,如shard數目replica數目, 創(chuàng)建時間等;

索引模板元數據(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所有狀態(tài)的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線記錄了每個節(jié)點上的shard的路由信息,由shardRouting構成nodeRoutingTable,然由NodeRoutingTable構成NodesRoutingTable(集群shardRouting)。

同所有是其它模塊一樣,這些Routing的相關操作也是由service對外提供,另外這一部分還有以下shard操作的相關類如ShardIterator,ShardShuffle等。

總結

本篇從結構上對metadata和Routing部分進行了簡單說明,這兩部分連接著cluster和index。這里的說明并沒有深入到方法層面,一則這里的邏輯大部分很簡單,另外這些方法在后面的數據(index)部分的分析中會有涉及。

以上就是elasticsearch元數據構建metadata routing源碼分析的詳細內容,更多關于elasticsearch元數據構建metadata routing的資料請關注腳本之家其它相關文章!

相關文章

  • Spring?Boot?如何正確讀取配置文件屬性

    Spring?Boot?如何正確讀取配置文件屬性

    這篇文章主要介紹了Spring?Boot?如何正確讀取配置文件屬性,項目中經常會經常讀取配置文件中的屬性的值,Spring?Boot提供了很多注解讀取配置文件屬性,那么如何正確使用呢,下文一起來參考下面文章內容吧
    2022-04-04
  • 一文帶你了解SpringBoot中常用注解的原理和使用

    一文帶你了解SpringBoot中常用注解的原理和使用

    這篇文章主要介紹了一文帶你了解SpringBoot中常用注解的原理和使用
    2022-11-11
  • spring cloud alibaba Nacos 注冊中心搭建過程詳解

    spring cloud alibaba Nacos 注冊中心搭建過程詳解

    這篇文章主要介紹了spring cloud alibaba Nacos 注冊中心搭建過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Spring中@Configuration注解修改的類生成代理原因解析

    Spring中@Configuration注解修改的類生成代理原因解析

    大家好,本篇文章主要講的是Spring中@Configuration注解修改的類生成代理原因解析,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Java多線程中的Executor框架解析

    Java多線程中的Executor框架解析

    這篇文章主要介紹了Java多線程中的Executor框架解析,Executor 框架是 Java5 之后引進的,在 Java 5 之后,通過 Executor 來啟動線程比使用 Thread 的 start 方法更好,除了更易管理,效率更好,需要的朋友可以參考下
    2023-12-12
  • Java的jstack命令使用示例詳解

    Java的jstack命令使用示例詳解

    jstack 命令非常的簡單,我們可以通過 jstack -h 或者 jstack -help 命令查看它的用法詳情,今天通過本文重點給大家介紹Java的jstack命令使用,感興趣的朋友一起看看吧
    2022-03-03
  • SpringData關鍵字查詢實現方法詳解

    SpringData關鍵字查詢實現方法詳解

    這篇文章主要介紹了SpringData關鍵字查詢實現方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • java基于swing實現的連連看代碼

    java基于swing實現的連連看代碼

    這篇文章主要介紹了java基于swing實現的連連看代碼,包含了游戲中涉及的事件處理與邏輯功能,需要的朋友可以參考下
    2014-11-11
  • skywalking源碼解析javaAgent工具ByteBuddy應用

    skywalking源碼解析javaAgent工具ByteBuddy應用

    這篇文章主要為大家介紹了skywalking源碼解析javaAgent工具ByteBuddy應用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • idea中如何連接hive

    idea中如何連接hive

    這篇文章主要介紹了idea中如何連接hive問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論