灌水唠嗑区
其他
文章
生产环境为什么不建议依赖默认分布规则?
发表于2026-04-09 09:16:4821次浏览4个评论
在 GBase 8a MPP 中,表未指定 DISTRIBUTED BY 子句时,数据如何分布?生产环境为什么不建议依赖默认分布规则?
评论
登录后才可以发表评论
GBase用户28017发表于 3个月前
为什么呢。
柒柒天晴发表于 3个月前
蹲
罗小胖发表于 3个月前
未指定DISTRIBUTED BY时,它是随机分布表,gcluster_random_insert默认是为0的,此时所有写入该表的数据都会落在和发起集群节点相同的单机节点上,也就是数据都会落在第一个节点上,这样就会在多节点集群上,大部分数据都落在第一个节点上,造成数据分布不均衡的问题,起不到多节点分布数据库的真正作用;
而当该参数为1时,才会使写入的每条数据,采用random()%分片数原则,随机落在任意单机节点上。但也有一定的问题,数据落盘的节点是随机的,如果后续需要该表进行dml操作时,就得全表扫描,表小的时候问题不大,但该表后续的数据量越大,每次操作都需要全表扫描,这样每次操作时都会花很大时间来完成;
若建表时,指定了distributed by分布键时,无论参数是否有开启,都会根据这个分片键来进行数据落盘,不会造成数据分布不均衡的问题,后续对该表进行dml操作时,条件中可以根据分布键来作为条件,这样就可以直接在其中一个节点上进行dml操作,因为根据分布键来落片数据,同个节点上该分布键的数据是一样的,这样操作dml花费的时间远比全表扫描来得快很多。
而当该参数为1时,才会使写入的每条数据,采用random()%分片数原则,随机落在任意单机节点上。但也有一定的问题,数据落盘的节点是随机的,如果后续需要该表进行dml操作时,就得全表扫描,表小的时候问题不大,但该表后续的数据量越大,每次操作都需要全表扫描,这样每次操作时都会花很大时间来完成;
若建表时,指定了distributed by分布键时,无论参数是否有开启,都会根据这个分片键来进行数据落盘,不会造成数据分布不均衡的问题,后续对该表进行dml操作时,条件中可以根据分布键来作为条件,这样就可以直接在其中一个节点上进行dml操作,因为根据分布键来落片数据,同个节点上该分布键的数据是一样的,这样操作dml花费的时间远比全表扫描来得快很多。
茵陈发表于 2个月前
继续努力
热门帖子
- 12025-12-01浏览数:182763
- 22023-05-09浏览数:25057
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17529