集群数据分区与负载均衡

IoTDB 以数据分区(DataRegion)为单位对元数据和数据进行管理,从序列和时间两个维度进行数据划分。

数据分区与负载均衡 - 图1

分区槽

一个序列分区槽和一个时间分区槽可以组合产生一个数据分区(当该序列分区槽在该时间分区槽下有对应数据时)。

序列分区槽

每个数据库持有固定数量的序列分区槽,默认为1000个。该数据库管理的每个时间序列都将通过序列分区算法(通常为某种哈希算法)被分配给唯一的序列分区槽管理。

数据分区与负载均衡 - 图2

时间分区槽

每个时间序列都将持续产生数据,如果一个时间序列产生的全部数据持续存储于一个节点,那么集群新增的 DataNode 可能无法得到有效利用。

时间分区槽从时间维度对时序数据进行分片(默认为每1天一个时间分区),使得集群时序数据的存储易于规划。

元数据分区

单个数据库的元数据分区管理,会按照一定的负载均衡策略,将所有序列槽分配到相应的 SchemaRegionGroup 中,进而在集群中横向扩展。

数据分区与负载均衡 - 图3

数据分区

会按照一定的负载均衡策略,进行时间分区槽和序列分区槽的划分,并分配到相应的 DataRegionGroup 中,进而在集群中横向扩展。

数据分区与负载均衡 - 图4

负载均衡

当集群容量保持不变时,数据会被均匀分配到各个节点,以实现存储和计算资源的均衡利用。

同时,在进行集群扩容时,系统会自动增加区域(region)的数量,以充分利用所有节点的计算资源,无需人工干预。这种动态扩展能够提高集群的性能和可扩展性,使整个系统更加灵活和高效。