gpt4 book ai didi

MySQL 行哈希

转载 作者:行者123 更新时间:2023-11-29 21:24:39 26 4
gpt4 key购买 nike

我正在开发一个数据库系统,其中有一个主数据库和表和许多从数据库,销售人员需要从主数据库同步数据。

关于此安排的一些要点:1)从属db(S)会时不时地离线,因此当它们再次上线时,服务将“同步”它们。 (所以没有复制)2)我无法更改主数据库,因此无法更改触发器。 (想象主数据库不属于我)3) 同步将在服务中进行,速度并不重要。4)没有大量的数据 - 所以我什至可以遍历每一行。5) 行中的数据变化很大,从 varchar(3) 到 varchar(500)

我环顾四周,发现了 Md5() - 我认为这很棒,因为这样我就可以 CONCACT() 行值,并进行逐行比较。我发现的问题是 CONCAT(和 GROUP_CONCAT)有一点限制,因为它有字符限制。

获取“行”校验和或哈希的最佳方法是什么?

CHECKSUM ROW WHERE id = 1 会很棒...最接近这个的是什么?

更新:我已经设法到达“SELECT @@group_concat_max_len;”返回最大值 (4294967295)。但这段代码仍然不起作用:

SELECT id, MD5(GROUP_CONCAT(MD5(`id`), ...many columns here... ,MD5(`col30`))) AS 'md5Hash' FROM company_table GROUP BY id;

它仍然只适用于少数列。

最佳答案

好吧,我要回答这个问题,因为我认为我已经说得足够多了。

结果是这样的:

SELECT id, MD5(CONCAT(IF(col1,CRC32(col1),CRC32('')), ... ,IF(col20,CRC32(col20),CRC32('')))) AS 'md5has' FROM table

导致 CONCAT 的字符串数量最少,因为 CRC32 最多只能生成 10 位数字值 (4,294,967,295),因此即使 concat 或 group_concat 最大值为 1024,我们也可以生成 10 位 CRC,然后我们可以对一次包含 102 列的行。

最好的选择是构建一个多遍系统,在多次传递中对包含超过 102 列的表进行哈希处理。

有点腰宽,但仍然比散列客户端更好......IO节省仍然是巨大的,而且谁制作具有102列的表?!

关于MySQL 行哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35562552/

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