默认的桶数是 113。为什么?为什么不是110?桶逻辑是否在某个“可除以”值下表现更好。
SnappyData 中有很多桶较少的示例。这是为什么?确定使用比默认 113 更少的存储桶的逻辑是什么?
选择少有什么影响?更多的桶呢?我看到很多日志记录在我的 Spark SQL 查询中,在每个存储桶中查找数据。拥有更多存储桶对查询的性能是否更差?
默认的桶数是 113。为什么?为什么不是110?桶逻辑是否在某个“可除以”值下表现更好。
SnappyData 中有很多桶较少的示例。这是为什么?确定使用比默认 113 更少的存储桶的逻辑是什么?
选择少有什么影响?更多的桶呢?我看到很多日志记录在我的 Spark SQL 查询中,在每个存储桶中查找数据。拥有更多存储桶对查询的性能是否更差?
请按照以下准则计算分区表的桶总数:
使用质数。我们在内部使用散列函数,这提供了最均匀的分布。查看这篇文章了解更多详细信息:为什么在 hashCode 中使用素数?
使其至少是您希望为该表拥有的数据存储数量的四倍。存储桶与数据存储的比率越大,负载可以越均匀地分布在成员之间。
但是请注意,负载平衡和开销之间存在权衡。管理存储桶会带来大量开销,尤其是在冗余级别较高的情况下。
我们选择了一个在基于散列的分区逻辑中分配数据最有效的素数。桶的数量会对查询性能产生一定的影响。当桶被转换为 Spark 任务时,会有更多的桶数量的任务调度开销。
但是,如果您的集群在 CPU 数量方面具有更多容量,则您当然应该尝试将存储桶的数量与接近的素数相匹配。