数据重分布负责数据在节点间的重新分布,根据拓扑下节点的分布关系以及数据分布特性会采用不同的数据重分布方式。我们可以通过日志来了解数据重分布过程。
在express.log里按表找到重分布过程日志,查找如下几个标识。[create_slice_step] 表示在创建分片,即在新节点建表。[slice_move_step] 表示从一个节点往另一个节点同步分片数据。[change_distribution_id_step]表示在更改distributionid。[delete_slice_step]表示删除原有分片,这种情况是将一个分片直接移动到新节点上,通常如果是分布表且主分片数相同情况下会使用这种方式。
分布表还有一种常用的方式,如果出现[create_inter_table_step]则表示在创建中间表,随后会有[data_move_step]将源表数据向中间表移动,然后[delete_slice_step]和[rename_step]即把原表删除,将中间表重命名,出现这些标识意味着两个拓扑主分片数不一致且分片分布也不同,这种情况下数据移动最多。
还有一种特殊情况,不需要移动数据,只有[create_slice_step] 和[change_distribution_id_step],即在新节点上只建立空分片改变distributionid,如果出现这种日志说明新的拓扑完全包含老的拓扑,且表是随机分布表。
相对分布表,复制表的数据迁移相对简单,[create_slice_step]在新节点创建表 、[slice_move_step] 在节点间同步数据、[change_distribution_id_step]更改distributionid、[delete_slice_step]无内容,不需要删除表。出现这种日志表示集群扩展了新节点,需要将复制表数据分布到新节点上。如果[create_slice_step]、[slice_move_step]没有输出日志,只有[change_distribution_id_step]更改distributionid、[delete_slice_step]删除表,则表示是集群在缩减节点后,做的数据分布,此时只需要将被缩掉节点上的表删除即可。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。