美文网首页
大量数据去重方案

大量数据去重方案

作者: samYau | 来源:发表于2017-03-24 13:12 被阅读0次

    数据库中有有一张表专门存储用户的维度数据,由于随着时间的推移,用户的维度数据也可能发生变化,故每一次查看都会保存一次记录。
    现在需要对数据按用户分析,但当中有大量的重复数据,仅用数据库的等值去重明显不可行。

    对数据内容求MD5值

    • MD5值的特点:
      1.压缩性:任意长度的数据,算出的MD5值长度都是固定的。
      2.容易计算:从原数据计算出MD5值很容易。
      3.抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
      4.强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

    根据MD5值的特点,对每条记录的维度数据内容计算MD5值,然后根据MD5值判断重复记录。

        def main(self):
            for (credit_report_third_id,user_id,report_json) in self.get_records(1000):
                try:
                    m2 = hashlib.md5()   
                    m2.update(report_json.encode('utf-8'))   
                    md5value = m2.hexdigest()
                    self.insert_to_db(credit_report_third_id,user_id,md5value)
                except Exception as e:
                    raise
    

    对数据入库之后利用sql直接查出重复数据,然后将重复数据移除或者标记。

            SELECT
                credit_report_third_id
            FROM
                 credit_report_third_md5 as  a
            WHERE
                EXISTS (
                    SELECT
                        1
                    FROM
                        credit_report_third_md5 as b
                    WHERE
                        a.user_id = b.user_id
                    AND a.md5value = b.md5value
                    AND a.credit_report_third_id > b.credit_report_third_id
                )
    

    在查看重复数据同时,出现几个大量重复的值,通过查看原始内容发现为:

    md5值 实际内容
    4067f33047d9b56d0046d8141c783e68 {"errorCode":"0","errorDescription":"报告不存在,请稍后再试","successful":"0"}
    372c04fa8482595762c0ec496964284c {"result":0,"message":"查询成功","matches":[]}

    后面可直接对该值另外处理提升效率。

    相关文章

      网友评论

          本文标题:大量数据去重方案

          本文链接:https://www.haomeiwen.com/subject/hdzxottx.html