内容纲要
概要描述
从 ArgoDB 3.2.2 版本开始,系统支持自动分桶功能。当创建分桶表时,如果未使用 INTO <num_buckets> BUCKETS 手动指定分桶数,ArgoDB 会根据集群的磁盘配置自动计算一个合理的默认分桶数,无需用户手动指定,简化了建表操作。
详细说明
自动分桶计算规则
默认分桶数的计算公式为:默认分桶数 = 大于(数据磁盘总数 × 2 ) 的最近一个质数
其中“数据磁盘总数”是指集群中所有 TabletServer 节点上配置的物理磁盘数量(即 tabletserver.store.datadirs 配置项中指定的磁盘目录数量之和)。
参数控制
该计算规则由参数 argodb.default.bucket.ratio 控制,该参数用于调整磁盘总数的乘数因子。
- 在 ArgoDB 6.0.2 之前,该参数的默认值为 5。
- 在 ArgoDB 6.0.2 及之后版本,默认值已调整为 2,以降低默认分桶数,避免产生过多小文件。
用户可以通过 SET 语句临时修改该参数,例如:SET argodb.default.bucket.ratio=3;
示例说明
假设集群配置如下:
- TabletServer 节点数:4 个
- 每个 TabletServer 配置的 tabletserver.store.datadirs 数量:3 个
则数据磁盘总数 = 4 × 3 = 12。按照默认规则(argodb.default.bucket.ratio=2),计算过程为:磁盘总数 × 2 = 12 × 2 = 24,取大于 24 的最近质数:29
因此,执行以下建表语句时,系统会自动将分桶数设置为 29:
CREATE TABLE testholo(id INT, name STRING)
CLUSTERED BY (id)
STORED AS HOLODESK;
验证分桶数:
SHOW CREATE TABLE testholo; 输出结果中,CLUSTERED BY (id) INTO 29 BUCKETS 即表示自动分桶生效。
FAQ:
如果tabletserver.store.datadirs配置的目录名称比较固定,比如截图中都是以/mnt/ 开头,可以参考截图ctrl+f计算,120*2,向上取第一个质数,即241.
