实习期间做的是存储服务,存储文件上传到腾讯云的OSS上后,本地数据库会记录文件的相关信息。比如名称、大小、下载路径等等。时间久了,有时候会出现腾讯云上存在这个文件,但是本地数据库没有它的信息。或者本地存在某文件的信息,但是云上却没有,这就需要主动把本地多余的文件信息删除掉。这时候,就需要编写一个同步更新存储文件的接口了,实现云上和数据库的信息保持同步。
刚开始的时候,我用的是硬着来实现这个这个接口的。我是先把得到云上文件的List,本地数据库文件信息的List。先用两个for循环,向本地数据库添加云上存在而数据库不在的文件信息。接着再两个for循环把本地数据库冗余文件信息删除。用了四个for循环,现在想想都可怕。
最近需要优化的时候,才想到利用map的key值唯一性的特点来解决这个问题。上传的文件名uploadName(与原文件名不同)是唯一值的,所以可作为map的key值。
方法是先获取数据库文件信息的map集合,再与腾讯云上的文件List中的uploadName进行key值对比,对比为空的情况下证明本地数据库不存在该文件信息,需要进行插入数据库操作;不为空则证明存在该信息,map中remove掉改信息,最后map中剩下的则是云上不存在的冗余文件信息。map遍历删除即可。
//1.添加腾讯云存储上有,本地数据库没有的记录进来
// 2.remove掉map(数据库)和腾讯云存储均存在的记录,最后map剩下的是本地数据库的冗余记录
//获取数据库文件信息的map集合
Map<String, OssFileEntity> map = oss