设计一个基于mongo的文档对比工具

本文仅介绍一下实现思路,不详细进行代码说明

业务场景:数据迁移后,需要将新库里的文档内容和老库里的文档内容进行对比,查找数据不一致的文档

这里说一下我之前想到的一些思路:
1、使用第三方工具来实现,之前使用google的高亮文本对比工具类,但是使用过后发现这个所谓的高亮文本对比只能按照字符顺序地进行对比,比如说{name:dd,age:20}和{age:20,name:dd}这两个文档,其实内容都是一样的,在该业务场景下这两个文档即是一致的,但是使用这个第三方的对比工具类进行处理的话它会认为这两个文档不是一致的;因此这种方法,die;

2、使用map和set集合,每对比一个文档就将文档中的数据用map来进行存储,将两个文档的所有key丢进set然后遍历set拿到key再通过key去拿map中的value进行对比;想想就很麻烦,而且耗费的资源不可想象,如果文档中有key对应的value是map类型,那么还得进行处理,如果要优化的话也只能是先对key进行排序,判断两个文档中的key是否一致,如果一致的话再进行处理,这种方法耗费的资源太猛了,逻辑也十分的复杂,要根据文档来处理逻辑,die;

3、将文档转换成存储时的对象,通过对象来进行其属性值的比对,主要是使用反射,对对象中的不同数据类型的属性进行赋值的时候可以使用责任链模式。

详细说明一下第三种方法时的实现思路:
1、先自定义一个配置类用来存储多个mongo的连接信息(用来连接库)
2、根据配置信息获取每个库下的某个collection下的所有表(用来获取要对比的表)
3、获取所有表的索引(用来查找两个库中有相同索引的表,暂时只考虑对比两个库,将两个表空间中表的索引去重一下再在每个表空间中挨个遍历一下就可以初步得到内容不一致的表)
4、遍历所有表,使用反射根据表中的内容赋给该表对应的对象(用来做内容对比)
5、根据初始化好的对象进行对象属性值的对比,若所有属性相同则两个库中的表内容一致,若出现对象属性值不相同则两个库中的表内容不一致(对比内容)

贴一下项目结构
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值