Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

基本写入流程

Image Removed

写入流程

  • 客户端 C 连接集群任意 DataNode A 发送写入请求

  • 如果 A 本地没有当前写入数据的分区表缓存,向 ConfigNode 共识组发送写入的设备全路径和时间(以下为 ConfigNode 共识组的执行流程)找到此数据对应的数据分区

    • 找到此数据分区对应的 List<VSG 共识组>,选择最后一个作为写入的 VSG如果此数据分区未分配 VSG 共识组,则分配一个 VSG 共识组

    • 找到此 VSG 共识组对应的一组 DataNode 并返回如果此 VSG 共识组没有分配 DataNode,则分配一组 DataNode,并在 DataNode 上初始化共识组

  • A 缓存分区信息,并根据该信息将写入请求转发给 B,并携带 VSG 共识组信息

  • 如果 B 本地没有写入序列的元数据,则检查此次写入的序列是否已经在集群注册(下述流程)

    • 如果 B 本地没有当前存储组的元数据分区表缓存,则向 ConfigNode 共识组发请求,查找写入点的元数据所在的 MManager 及所在的 DataNode D

    • B 缓存分区信息,并根据该信息将写入的序列及推断类型发送至 MManager如果 MManager 不存在此序列,将这些序列注册到 MManager

      • 如果存在,进行数据类型校验(存在且一致、存在且不一致),接着返回数据类型,编码等序列级别的元信息

    • B 以 MManager 返回的信息决定抛错或者在本地注册不存在序列的元数据。

  • B 将数据添加到共识模块中,写入成功后返回

Coordinator

coordinator主要与ClusterPlanRouter和ClusterPlanExecutor进行交互,接收和处理thrift模块的rpc调用

物理计划类型

转发至ConfigNode

  • 建/删除存储组

  • 创建/删除TTL

  • 创建/删除时间序列

  • 配置加载(loadConfigurationPlan

  • 权限相关

  • 创建/删除模板(待定

  • 创建/删除udf

  • 设置系统模式

  • 创建快照

  • MergePlan/FlushPlan/ClearCachePlan(由ConfigNode发送给所有VSG由ConfigNode发送给所有DataRegion)

该部分操作需要首先转发给Config集群,之后根据Config集群节点返回结果进行后续处理


本地执行操作

  • LoadDataPlan

  • OperateFilePlan

  • KillQueryPlan

  • local的LoadConfigurationPlan

该类操作无需转发,直接在本地执行


常规写入操作

  • 所有insertPlan(InsertRowPlan, InsertRowsPlan, InsertRowsOfOneDevice, InsertTablet, InsertMultiTablet)

  • AlterTimeseries


该部分操作首先需要根据分区表对写入操作进行拆分,之后发送给对应的vsg,流程参考上面的给出的写入流程。该部分操作首先需要根据分区表对写入操作进行拆分,之后发送给对应的DataRegion,流程参考上面的给出的写入流程。


查询操作(Query)

查询操作通常需要进行拆分和结果集的合并,这里不多做赘述,输入到coordinator中处理的查询应当是以物理计划的形式。

...

数据/元数据分片和负载均衡相关的物理计划(未整理)

缓存设计

客户端缓存

在客户端缓存每个device对应的partitionGroup的leader,减少集群节点内部的转发次数

对应的endpoint保存在rpc调用的返回值TSStatus中

客户端缓存相关的文档

Map<DeviceId, Endpoint>

数据分区表缓存

...

数据分区表缓存在每个Datanode,用于缓存保存时间分片的物理节点。数据分区表缓存在查询和写入过程中都需要用到,若无缓存,则需要向ConfigNode请求对应数据分区表项。

...

数据结构

  • Map<存储组, Map<设备组, Map<时间段, List<VSG 共识组>>>>

  • Map<VSG 共识组, List<物理节点>>

...

更新方式

...

构建DataPartitionrRequest向ConfigNode申请数据分区表项,通过一次rpc(confignode不需要同步)

...

删除存储组(缓存失效)

...

负载均衡(缓存失效)

...

实时负载均衡:某节点上压力过大,需要进行设备组的迁移

元数据分区表缓存

  • 元数据分区表存在于每个Datanode中,在写入或查询时,本地元数据缓存miss时,需要向MManager请求元数据,此时需要元数据分区表定位元数据所在的MManager位置。

  • 数据结构

    • Map<存储组, Map<设备组, MManager共识组>>

    • Map<MManager共识组, List<物理节点>>

  • 更新方式

    • 构建MetaDataPartitionRequest向ConfigNode申请元数据分区表项,通过一次rpc得到对应的分区表项

    • 删除存储组(缓存失效)

    • 元数据负载均衡

      • 迁移设备组的元数据到其他MManager共识组

元数据缓存

...

元数据缓存用于保存

...

数据结构

  • LRUCache<PartialPath, IMeasurementMnode>

...

更新方式

...