...
数据分区表缓存在每个Datanode,用于缓存保存时间分片的物理节点。数据分区表缓存在查询和写入过程中都需要用到,若无缓存,则需要向ConfigNode请求对应数据分区表项。
数据结构
Map<存储组, Map<设备组, Map<时间段, List<Leader>>>>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
- todomigrateDataPartition
- 所有需要调用lookupDataRegions接口向ConfigNode获取数据分区信息的操作,在查询完成后,新增缓存项
元数据分区表缓存
元数据分区表存在于每个Datanode中,在写入或查询时,本地元数据缓存miss时,需要向MManager请求元数据,此时需要元数据分区表定位元数据所在的MManager位置。元数据分区表存在于每个Datanode中,在写入或查询时,本地元数据缓存miss时,需要向SchemaRegion请求元数据,此时需要元数据分区表定位元数据所在的SchemaRegionId。
数据结构
Map<存储组, Map<设备组,
MManager共识组>>SchemaRegionId>>
Map<MManager共识组Map<schemaRegionId, List<物理节点>>
更新方式
- 所有需要调用lookupSchemaRegions接口向ConfigNode获取元数据分区信息的操作,在查询完成后,新增缓存项
- 所有insert操作(insertRow,insertRows,insertTablet,insertMultiTablets,insertRowsOfOneDevice)
- 创建时间序列
- 所有查询语句(executeQueryStatement)
构建MetaDataPartitionRequest向ConfigNode申请元数据分区表项,通过一次rpc得到对应的分区表项
- 所有需要调用lookupSchemaRegions接口向ConfigNode获取元数据分区信息的操作,在查询完成后,新增缓存项
删除存储组(缓存失效)
元数据负载均衡- 删除存储组:需要清所有节点上的该存储组的元数据分区缓存,删除某个存储组的所有缓存
- 在DataNode删除本地数据之前,删除cache中的缓存
元数据负载均衡,更新缓存
- migrateSchemaRegion
元数据缓存
元数据缓存基于IoTDB中的数据模型,以树型的形式进行组织。
...