Java场景100题
并发与性能优化 1. 大文件上传如何处理?分片上传 相关代码:https://github.com/SwimmingLiu/JavaSceneQuiz100/tree/main/lesson001 1.1 为什么需要分片上传? 大文件在上传的过程中,耗费的时间比较长。如果网络不稳定,很可能导致上传失败,需要重新上传。分片上传,就可以解决这个问题。 分片上传定义:将大文件拆分为不同的文件块,逐块进行上传 1.2 如何实现分片上传? 1.2.1 如何存储分片信息 分片上传需要记录文件的属性 (md5、大小、名称)、分片数量、文件存储的完整路径 (本地路径),还需要记录每个分块的上传情况 (分块大小、分块顺序、分块任务id)。可以用 分块上传任务表 和 分块文件表 来记录。 分块任务表 (t_shard_upload) create table if not exists t_shard_upload( id varchar(32) primary key, file_name varchar(256) not null comment '文件名称', part_num int not null comment '分片数量', md5 varchar(128) comment '文件md5值', file_full_path varchar(512) comment '文件完整路径' ) comment = '分片上传任务表'; 分块文件表 (t_shard_upload_part) create table if not exists t_shard_upload_part( id varchar(32) primary key, shard_upload_id varchar(32) not null comment '分片任务id(t_shard_upload.id)', part_order int not null comment '第几个分片,从1开始', file_full_path varchar(512) comment '文件完整路径', UNIQUE KEY `uq_part_order` (`shard_upload_id`,`part_order`) ) comment = '分片文件表,每个分片文件对应一条记录'; 分块文件表和分块上传表是 1 to M 的关系,假如当前文件分为10块。则会出现1个分片上传任务,和10个分片文件记录。 ...