Versions Compared

Key

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

客户端缓存

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

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

客户端缓存相关的文档

Map<设备全路径, Endpoint>


客户端缓存不需要保证一致性,因为而且每次缓存失效后都去访问client清缓存,会产生client数目次RTT,而且需要服务端维护所有连接的client信息。对于客户端缓存的不一致,是可以被容忍的,每个客户端即使缓存中保存的EndPoint是旧数据,可以通过一次RTT转发至正确的节点上,后面通过TSStatus中返回新的EndPoint对客户端缓存进行更新。


数据分区表缓存

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

  • 数据结构

    • Map<存储组, Map<设备组, Map<时间段, List<DataRegionId>>>>

    • Map<DataRegionId, list<Node>>
    • 使用LRU缓存
    • 给定配置项 DATA_PARTITION_CACHE_MEMORY,控制缓存大小
  • 使用方式
    • 在所有insert操作和查询操作时使用该缓存
  • 更新方式

    • 所有需要调用lookupDataRegions接口向ConfigNode获取数据分区信息的操作,在查询完成后,新增缓存项
      • 所有insert操作(insertRow,insertRows,insertTablet,insertMultiTablets,insertRowsOfOneDevice)
      • 所有查询语句(executeQueryStatement)
    • 根据TSStatus中的EndPoint,更新DataRegion中的Leader信息
    • 删除存储组:需要清所有节点上的该存储组的数据分区缓存,删除某个存储组的所有缓存
      • 在DataNode删除本地数据之前,删除cache中的缓存
    • 负载均衡,在缓存中更新DataRegionId对应的物理节点

      • migrateDataRegion
      • migrateDataPartition

元数据分区表缓存

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

  • 数据结构

    • Map<存储组, Map<设备组, SchemaRegionId>>

    • Map<schemaRegionId, List<物理节点>>

  • 更新方式

    • 所有需要调用lookupSchemaRegions接口向ConfigNode获取元数据分区信息的操作,在查询完成后,新增缓存项
      • 所有insert操作(insertRow,insertRows,insertTablet,insertMultiTablets,insertRowsOfOneDevice)
      • 创建时间序列
      • 所有查询语句(executeQueryStatement)
    • 构建MetaDataPartitionRequest向ConfigNode申请元数据分区表项,通过一次rpc得到对应的分区表项

    • 删除存储组:需要清所有节点上的该存储组的元数据分区缓存,删除某个存储组的所有缓存
      • 在DataNode删除本地数据之前,删除cache中的缓存
    • 元数据负载均衡,更新缓存

      • migrateSchemaRegion

元数据缓存

元数据缓存基于IoTDB中的数据模型,以树型的形式进行组织。

  • 元数据缓存用于保存

  • 数据结构

    • 树型结构(元数据模块开发)

  • 更新方式

    • 删除时间序列

    • 删除存储组