让我们假设我在ftp服务器上存储了大约100 000个文件(总共大约100 GB)。在我的数据库中,我有10万行FILE_LOCATION
,其中包含FTP服务器上每个文件的确切位置。现在我想通过REST从FTP服务器发送我的所有文件到其他服务器。我创建了一个执行以下操作的工具:
@Autowired
private FtpService ftpService;
@Autowired
private RestService restService;
@Autowired
private FileListProvider fileListProvider;
@Autowired
private LogService logService;
public void migrateFiles(){
List<Object> fileList = fileListProvider.getFileList(); // fetch list of ftp file locations
try {
ftpService.openconnection();
fileList.forEach(fileRecord -> {
File file = ftpService.fetchFile(fileRecord); //get single file
restService.sendFile(file); // send file to remote server
logService.logFileSend(file); // log file sending record into db
});
} catch (Exception e) {
e.printStackTrace();
} finally {
ftpService.closeConnection();
}
}
这工作得很好,我看到的唯一问题是性能:处理单个文件(下载,上传,创建日志)大约需要6秒钟,因为我的传输文件可以处理更多内容,并且文件不共享任何内容在彼此之间,我想做这个多场聚会。我的想法是为每个文件上载创建ardard,并同时处理它们。但是我有一些担忧,并指出我的问题所在:
ftpService
中,因此该bean应该是在剧院之间共享的单例。还是我应该为会议创建新的连接和会话,以免彼此干扰?logService
,因为我正在使用数据库中的序列生成器创建新实体,它们在创建时不会互相干扰吗?目前我估计整个过程大约需要7天,我的目标是不到2天。