您的位置:首页 > 房产 > 建筑 > 大规模数据去重场景

大规模数据去重场景

2024/10/6 5:53:44 来源:https://blog.csdn.net/qq_74042166/article/details/142069517  浏览:    关键词:大规模数据去重场景

eg:表1有50w+条数据;在这50W+数据中找出其中重复的数据。重复数据的条件是:表1中的字段1、字段2、字段3、字段4的值与其他数据的这几个字段值相等(其中表1中有20+字段),请问有什么合适的方案从这50W条数据中筛选出重复的数据(重复数据大概有5000条)

首先对于这种大规模数据,不太好一个个比较找出重复数据,不仅时间长,数据库也会进行大量的io操作,还有可能造成内存泄漏。目前对于这种场景我是总结了两种方法,如有更好的方法也欢迎一起讨论。

一、可以考虑使用 10个 Job,每个 Job 固定一个 ID 范围,扫描出数据。每个 Job 5万的数据量,很快就可以扫出来,而且你可以只到必要的字段。之后用扫描发送MQ,再接收 MQ 消息,查询字段的值是否存在。因为有Job、MQ 了,你可以适当控制扫描和消费速度。

举个例子来说:

  • Job 扫描数据

    • 任务:每个 Job 扫描表中的一部分数据(例如,扫描 5 万条记录)。
    • 提取信息:从每条记录中提取出字段1、字段2、字段3 和字段4 的值,并将这些值打包成消息。
  • 将数据放入 MQ

    • 消息内容:每个 Job 将提取的信息(例如,字段1、字段2、字段3 和字段4 的组合)作为消息放入 MQ 中。消息可以是 JSON 格式的字符串,包含这些字段的值。
  • MQ 中的数据

    • 队列:MQ 中的每条消息都包含一个记录的字段值组合。这些消息在 MQ 的队列中等待被消费者处理。
    • 存储方式:MQ 会将这些消息持久化到磁盘,以便在系统崩溃或重启后能够恢复数据。
  •  消费者处理消息

    • 任务:消费者从 MQ 中读取消息,检查这些字段值组合是否已经存在。消费者可以是一个或多个处理这些消息的进程。
    • 重复检查:消费者可能会将字段值组合存储在一个临时的数据结构(如哈希表)中,以快速判断这些字段组合是否重复。如果发现重复,记录相关信息进行后续处理。

二、对重复的数据判定条件进行冗余一个hash字段,然后拿这个字段判断比较是否有相同的

举个例子来说:

  1. 增加一个hash字段:你可以增加一个额外的字段,比如 hash_code,来存储 字段1字段2字段3字段4 组合的hash值。
  2. 计算hash值:对于每一行数据,你将 字段1字段4 的值拼接在一起,然后计算一个hash值。例如,你可以使用MD5或SHA等hash算法。

例如:

    • 第1行:A-B-C-D -> 计算出一个hash值 hash_1
    • 第2行:X-Y-Z-W -> 计算出一个hash值 hash_2
    • 第3行:A-B-C-D -> 计算出和第1行相同的hash值 hash_1
    • 第4行:A-B-X-D -> 计算出一个新的hash值 hash_3
  1. 通过hash值筛选重复数据:你可以根据 hash_code 来判断哪些数据是重复的。如果两行数据的 hash_code 相同,就可能是重复数据。例如,ID为1和ID为3的 hash_code 都是 hash_1,这意味着它们可能是重复的。接下来可以对它们的原始字段进行进一步比对,确保它们确实重复。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com