遍历对比不同版本的压缩包里的文件,挑出不同的做差分包,该如何高效实现?
项目组用java开发软件,发布的软件包内文件数量为10w级别,包大小1GB级别。现在需要做不同版本间的差分,实现跨版本的覆盖升级,具体描述:
新版本发布后,与旧版本做对比,将新增和修改的文件,提取出来,作为从旧版本向新版本升级的差分包
。
说明:有些文件,比如jar,新打包会被追加时间戳,内容可能与旧版完全一致,所以不能简单的比对md5,需要比对里边的class文件。
疑惑的功能点:
- 遍历发布包里的压缩包和jar中的文件,最好不解压,直接能读取文件信息,如文件内容或者计算md5,不知道这个功能有没有现成的模块? – 目前查的模块只能遍历压缩包里的文件名
- 对比压缩包里的文件和独立的文件,最好不开关文件读内容,这样效率低,大部分文件可以通过md5完成对比;
- 关于性能:10w个文件希望半小时内完成比对;
关于性能的考虑,我想这样实现:
- 生产者:通过一个node进程分析整体的包,遍历文件,将文件路径写入redis;
- 消费者:多进程并行取文件路径,独立比对处理; 不知道大家是否有更好的方案?