news 2026/9/16 8:04:24

如何做好超大文件的上传,以及相关的思考联想

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何做好超大文件的上传,以及相关的思考联想

关键的一点在于,把超大文件转换为小文件上传。

因此,技术难点就会放在如何保障小文件的合并、不丢失和性能。

我们先解决第一个问题,小文件的合并准确。

小文件在前端采用统一的算法切分,要确保每次切分出来的文件都一样。并小文件和大文件分别生成hash码,用于后端合并后进行小文件和合并后的大文件进行检测。

其次,我们解决不丢失的问题。

部分小文件上传后,前端浏览器崩溃或网络崩溃等导致后续上传不全的情况时,我们需要在后端存储好小文件,保障已上传的小文件不丢失。像OBS本身可以做分片上传,它默认小分片永久保留,为了成本考虑,可以妥协设置3天的过期清理的时间。

最后,我们解决性能问题。

这里性能问题的重点在于保障每次不要重复上传小文件,所以上传小文件时,设置一个上传检查,检验大文件是否有过上传,小文件hash码是否已上传,如果回答都为是,则跳过该小文件上传。

对这类问题,采用基本原理是化大为小,串行变并行。

以前遇到一个相似的问题,是从一个极大的广告池子里获取最贴近用户画像的5条广告。也用了相似的思路,把极大池子按类型分几个小池子,对大量中间广告而言,它触达用户的概率其实没有变化。 假设广告总体是N,用户拿到某一个广告的概率是5/N; 分5个池子后,用户拿到该广告的概率是5*1/5 * 1/N/5 = 5/N 。 可以看到概率是一致的。

不过这里仍有一点业务问题,对一些顶级广告而言,这个概率其实还是变相降低了,本来必定出现的广告现在有了一定概率不出现,不出现的概率是 4/5 * 4/5 * 4/5 *4/5 * 4/5 = 1024/3125 ,这个概率接近1/3,所以对公司来说,它可能造成收益下降。(因为顶级广告能赚更多钱)为了规避,又得建立一个动态的顶级广告池,确保每次一定要先去这个池子里进行一次匹配。这样做了之后,是否能收益最高呢,也不一定,因为是否是顶级广告是一个规则去判定的,它不一定精准。这样看回到一个大池子又很合理,但大池子又会导致性能问题,而丢失一部分曝光流量。

仔细思考后,会发现大到一定程度用分池加分级更有效,反之,在统一池子里更有效。

接着上面的思考,我们发现分级分池仍有一些缺陷,进一步思考,我们发现,如果设置一个多路召回,每次都从小池子里召回5条广告,它就会满足在同一个大池子获取顶级广告的优势;同时,因为每次从小池子中检索,它又避免了大数据导致的计算瓶颈;这个思想接近大数据的map-reduce的处理思维。

这个原理是利用了多级目录检索,首先分小池子,再在小池子冗余获取小部分数据,最后再从汇总数据中排序获取最好的5条广告。

这个思维方式并不罕见,很多数据库都支持分片、分库,都是化大为小的思维。

只是在业务中,数据并不平权,导致这种分片、分库,不一定是最优的策略。

因此也许还可以设计出一种特别的数据库,它支持分片,同时支持多路冗余召回。它不满足传统需要的分页查询,它也不是为了分页查询而设计;而是为了一种特有的场景,用户每次只需要最符合要求的少数数据,但不希望耗时过长,又不希望漏掉最有价值的某些数据。

进一步联想,可以发现它特别适合做RAG数据库。

当前的向量检索数据库Mivuls 正是拥有这一特性的数据库,它支持多路召回,同时每一路都获取TOP k条数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 8:04:06

SpringBoot宠物医院管理系统开发指南

1. 项目概述与核心需求宠物医院管理系统是基于SpringBoot框架开发的毕业设计项目,主要面向计算机相关专业学生。这个系统旨在解决传统宠物医院手工记录效率低下、信息孤岛等问题,通过数字化管理提升宠物医疗服务的质量和效率。从技术角度来看&#xff0c…

作者头像 李华
网站建设 2026/9/16 8:03:14

Flash做网站导航的5个注意事项与Web替代方案

Flash做网站导航的5个注意事项与Web替代方案 域名解析指向错误,服务器SSL证书过期,网站打不开时,客户第一反应不是查代码,而是骂你“技术不行”。这种【域名服务器搞不懂】的混乱,往往源于前期架构没定死。很多老站长还在用Flash做网站导航,觉得动画酷、加载快,但2024年了,这玩意儿在移动端简…

作者头像 李华
网站建设 2026/9/16 8:02:58

Matlab边缘检测源码拆解:Canny、LoG与Susan算子从原理到调参

简介:这份基于Matlab的边缘检测资源包,面向计算机、电子信息及数学等专业学生,可作为图像处理课程设计、期末大作业或毕业设计的参考资料,重点解决边缘检测算法实现与验证问题。压缩包共14个文件,包含9个.m源代码文件、…

作者头像 李华
网站建设 2026/9/16 8:02:27

MATLAB夫琅禾费衍射仿真:fft2实现、坐标映射与光栅缺级

简介:基于MATLAB的光学仿真资源,聚焦夫琅禾费衍射、双缝干涉、平面光栅衍射与单缝衍射四个经典波动光学主题,适用于本科、硕士阶段的课程设计、实验报告和课题入门。压缩包共12个文件,包含4个.m源代码、7张运行结果图(…

作者头像 李华
网站建设 2026/9/16 8:02:08

STM32H750移植FATFS:寄存器库驱动SD卡完整攻略

简介:面向使用STM32H7系列单片机的嵌入式开发者,这份源码包以STM32H750为例,采用寄存器库直接驱动硬件的方案,实现了FATFS文件管理系统,适用于需要将运行数据、配置参数或日志记录到SD卡等存储介质的工业控制、数据采集…

作者头像 李华
网站建设 2026/9/16 8:01:33

STM32F411裸机开发:从复位向量到main()的链接脚本详解

1. 项目概述:为什么一份“从复位到 main()”的链接脚本,比你想象中更重要如果你正在用 GNU Arm Embedded Toolchain 编译 STM32F411 的裸机程序,却在烧录后板子毫无反应、串口没输出、调试器连不上、甚至 J-Link 报“Target not halted”&…

作者头像 李华