性能优化:解决大量相同MD5文件创建时可能导致的慢SQL问题。

This commit is contained in:
刘小平 2024-11-13 00:55:21 +08:00
parent 17c7220def
commit 43cbbf08e0

View File

@ -168,22 +168,13 @@ public class StorageServiceImpl implements StorageService {
// 查询MinIO中是否存在相同MD5值的文件
FileMetadataInfoDTO fileMetadataInfo = new FileMetadataInfoDTO();
fileMetadataInfo.setFileMd5(saveDTO.getFileMd5());
List<FileMetadataInfoVo> alreadyFileList = fileMetadataRepository.list(fileMetadataInfo);
fileMetadataInfo.setIsFinished(true);
FileMetadataInfoVo alreadyFile = fileMetadataRepository.one(fileMetadataInfo);
boolean sameMd5 = false;
if (CollUtil.isNotEmpty(alreadyFileList)) {
for (FileMetadataInfoVo fileMetadataInfoVo : alreadyFileList) {
if (Boolean.TRUE.equals(fileMetadataInfoVo.getIsFinished())) {
saveDTO.setStorageBucket(fileMetadataInfoVo.getStorageBucket());
saveDTO.setStoragePath(fileMetadataInfoVo.getStoragePath());
sameMd5 = true;
break;
}
}
}
if (!sameMd5) {
if (null != alreadyFile) {
saveDTO.setStorageBucket(alreadyFile.getStorageBucket());
saveDTO.setStoragePath(alreadyFile.getStoragePath());
}else{
// 新文件时执行写入逻辑
storageEngineService.createFile(saveDTO, fileBytes);
}
@ -215,22 +206,14 @@ public class StorageServiceImpl implements StorageService {
// 查询MinIO中是否存在相同MD5值的文件
FileMetadataInfoDTO fileMetadataInfo = new FileMetadataInfoDTO();
fileMetadataInfo.setFileMd5(saveDTO.getFileMd5());
List<FileMetadataInfoVo> alreadyFileList = fileMetadataRepository.list(fileMetadataInfo);
fileMetadataInfo.setIsFinished(true);
FileMetadataInfoVo alreadyFile = fileMetadataRepository.one(fileMetadataInfo);
boolean sameMd5 = false;
if (CollUtil.isNotEmpty(alreadyFileList)) {
for (FileMetadataInfoVo fileMetadataInfoVo : alreadyFileList) {
if (Boolean.TRUE.equals(fileMetadataInfoVo.getIsFinished())) {
saveDTO.setStorageBucket(fileMetadataInfoVo.getStorageBucket());
saveDTO.setStoragePath(fileMetadataInfoVo.getStoragePath());
sameMd5 = true;
break;
}
}
}
if (!sameMd5) {
if (null != alreadyFile) {
saveDTO.setStorageBucket(alreadyFile.getStorageBucket());
saveDTO.setStoragePath(alreadyFile.getStoragePath());
}else{
// 新文件时执行写入逻辑
storageEngineService.createFile(saveDTO, inputStream);
}