我有以下问题(我将在下面给出实际上下文):
我有一系列 id(当然是与这些 id 相关联的数据,但我会给出核心问题)1..最多 500000
现在这些是连续的但是它们是随机“到达”的,有些可能永远不会“到达”,而另一些可能会分批频繁出现,所以它们分布不均(我说到达时指的是我的意思作为数据库中的记录)。
如果我创建某种 id 计数及其外观,我如何才能找到多少个合适的桶数来进行模运算,以便桶被均匀填充?
我的问题的背景:
我正在阅读 hash partitioning
我认为基本假设是您散列的列值分布良好。但是,如果在表中您不能对分布良好的列/属性进行分区(因为数据分布不均,例如客户 ID 购买的东西比其他人购买的东西少)。
那么应该如何处理呢?分区范围应该小一些吗? (我的意思是模数部分要小而不是大)
最佳答案
如果你想每月获取每个分区的分布情况,那么你可以使用以下语句来实现:
SET @partitions = 4;
SELECT
id_column % @partitions as bucket,
MONTH(your_date) as month,
COUNT(*) as cnt
GROUP BY
month,
bucket;
并使用变量@partitions 的值。如果时间线跨度超过一年,则只添加一个 YEAR 列:
SET @partitions = 4;
SELECT
id_column % @partitions as bucket,
YEAR(your_date) as year,
MONTH(your_date) as month,
COUNT(*) as cnt
GROUP BY
year,
month,
bucket;
这是查看可用数据如何在分区之间分配的好方法。
关于mysql - 如果我知道分布将不相等,如何计算哈希中的桶数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25612062/