gpt4 book ai didi

mysql - 将十六进制索引拆分为 n 个部分

转载 作者:可可西里 更新时间:2023-11-01 06:50:02 30 4
gpt4 key购买 nike

我有一个表,其中包含字符串中的主键,例如12a4...c3af...。我想并行处理它们:

process_them(1,4) on machine 1
process_them(2,4) on machine 2
process_them(3,4) on machine 3
process_them(4,4) on machine 4

做上面的操作必须选择表中的所有行,没有机器相互协调。我能想到的最好的主意是将它们分成 16 个,例如:

select * from table where id like '1%'
...
select * from table where id like 'e%'
select * from table where id like 'f%'

是否有更好的想法可以让我对总行进行更多拆分,例如 1/2、1/4、1/8、1/16、1/32 等?

注意:我这样做是为了每晚处理用户数据并向他们发送通知。我没有在数据库本身上编辑任何内容。而且我们需要一次处理数千个用户,它不能以细粒度的方式拆分,因为那样效率不高。

最佳答案

好主意...

您可以使用 MD5 哈希以合理分布的方式快速、一致地(永远不会遗漏行)且无需 ddl 更改来分发行。

*let n = number of desired partitions. Use the following sql to 
*let s = salt, expirementally chosen to provide the best distribution based on key allocation pattern.
SELECT * FROM TABLE WHERE mod( cast( conv( md5( concat( s, Priamry_Key ) ), 16, 10), n ) = 0;
SELECT * FROM TABLE WHERE mod( cast( conv( md5( concat( s, Priamry_Key ) ), 16, 10), n ) = 1;
...
...
SELECT * FROM TABLE WHERE mod( cast( conv( md5( concat( s, Priamry_Key ) ), 16, 10), n ) = (n-1);

这是我在生产环境中实现过几次并取得良好效果的方法。

这里的 SQL 没有经过测试,我不保证语法。

关于mysql - 将十六进制索引拆分为 n 个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17986117/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com