写入流程

  • 客户端 C 连接集群任意 DataNode A 发送写入请求
  • 如果 A 本地没有当前写入数据的分区表缓存,向 ConfigNode 共识组发送写入的设备全路径和时间(以下为 ConfigNode 共识组的执行流程
    • 找到此数据对应的数据分区
    • 找到此数据分区对应的 List<DataRegion 共识组>,选择最后一个作为写入的 DataRegion
      • 如果此数据分区未分配 DataRegion 共识组,则分配一个 DataRegion 共识组
    • 找到此 DataRegion 共识组对应的一组 DataNode 并返回
      • 如果此 DataRegion 共识组没有分配 DataNode,则分配一组 DataNode,并在 DataNode 上初始化共识组
  • A 缓存分区信息,并根据该信息将写入请求转发给 B,并携带 DataRegion 共识组信息
  • 如果 B 本地没有写入序列的元数据,则检查此次写入的序列是否已经在集群注册(下述流程)
    • 如果 B 本地没有当前存储组的元数据分区表缓存,则向 ConfigNode 共识组发请求,查找写入点的元数据所在的 SchemaRegion 及所在的 DataNode D
    • B 缓存分区信息,并根据该信息将写入的序列及推断类型发送至 SchemaRegion 
      • 如果 SchemaRegion 不存在此序列,将这些序列注册到 SchemaRegion
      • 如果存在,进行数据类型校验(存在且一致、存在且不一致),接着返回数据类型,编码等序列级别的元信息
    • B 以 SchemaRegion 返回的信息决定抛错或者在本地注册不存在序列的元数据。
  • B 将数据添加到共识模块中,写入成功后返回

  • No labels