2024-02-28 17:34:59.0|分类: 列式数据库|浏览量: 437
Doris 支持两层数据划分:
Range 分区
List 分区
分桶列的选择,是在 查询吞吐 和 查询并发 之间的一种权衡:
多个 Tablet 在逻辑上归属于不同的分区(Partition),一个 Tablet 只属于一个 Partition,而一个 Partition 包含若干个 Tablet。因为 Tablet 在物理上是独立存储的,所以可以视为 Partition 在物理上也是独立。 从逻辑上来讲,分区和分桶最大的区别就是分桶随机分割数据库,分区是非随机分割数据库。 关于 Partition 和 Bucket 的数量和数据量的建议 1.一个表的 Tablet 总数量等于 (Partition num * Bucket num)。 2.一个表的 Tablet 数量,在不考虑扩容的情况下,推荐略多于整个集群的磁盘数量。 3.单个 Tablet 的数据量理论上没有上下界,但建议在 1G - 10G 的范围内。如果单个 Tablet 数据量过小, 则数据的聚合效果不佳,且元数据管理压力大。如果数据量过大,则不利于副本的迁移、补齐, 且会增加 Schema Change 或者 Rollup 操作失败重试的代价(这些操作失败重试的粒度是 Tablet)。 4.当 Tablet 的数据量原则和数量原则冲突时,建议优先考虑数据量原则。 5.在建表时,每个分区的 Bucket 数量统一指定。但是在动态增加分区时(ADD PARTITION), 可以单独指定新分区的 Bucket 数量。可以利用这个功能方便的应对数据缩小或膨胀。 6.一个 Partition 的 Bucket 数量一旦指定,不可更改。所以在确定 Bucket 数量时,需要预先考虑集群扩容的情况。 比如当前只有 3 台 host,每台 host 有 1 块盘。如果 Bucket 的数量只设置为 3 或更小,那么后期即使再增加机器, 也不能提高并发度。 为什么需要分桶? 为了分桶裁剪,并且避免数据倾斜,同时也为了分散读 IO,提升查询性能,可以将 Tablet 的不同副本分散在不同机器上,查询时可以充分发挥不同机器的 IO 性能。 |