<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
雖然在剛開始原始碼概述時把程式碼分為分散式和資料兩部分,但是它們的界限並不明顯。之前這幾篇可以說是這兩部分的銜接。我們在快速接近資料(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。
如下圖所示:
一個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的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45