前言

笔者前段时间参加并主导了一个数据采集的项目。

目的是从HuggingFace 上面下载一个标的数据量为 360M(约 3600w 条数据)的数据集,然后根据数据集中给定的 URL 去下载指定的视频。

虽然过程中踩了不少坑,但是最终也顺利的完成了。如今,记录一下项目经历,也算是一个踩坑记录本了吧!

本次视频处理投入成本约 40,000元人名币
本次项目主要涉及技术、工具:

minio,redis,mysql,python,ftp,sftp,canddy,nginx,yt-dlp,windows,clash,miniproxy,navicate,bash,ads-cli,s3file-browser,ffmpeg.......  

接下来我将会带大家回顾本次数据处理的一些踩坑点。

数据清洗

标的数据下载

光是原始数据文件约 49GB

输入图片说明

处理思路

我是传统的全栈开发,按照传统的数据处理思路,首先第一选择是将这些标的文件导入数据库。于是我在我本地部署了一个 MySQL8.4 的数据库,用Navicate连接上本地数据库,选择从 CSV 中导入数据库,但是这里遇到一个问题,需要等待的时间太长了【最终等待导入完成】

可是又迎来了另外一个问题,
当我使用 语句查询一共有多少数据的时候 反应挺慢的,想着也能忍受一下。
可是当我准备使用其他语句的时候,那场景简直不能忍受!!!毕竟数据量太大了。
备注:面对千万级的数据量级,mysql 的性能尤为重要。影响因素有 I/O 速度, CPU,等等

我自己本地电脑是 Macbook Pro M1 256G,在导入完成数据库和下载完文件之后,我的存储空间捉襟见肘。于是乎,斟酌了一番之后购买了一台 64G RAM 的服务器,准备用来做数据后端服务器。想着,配置都到这样了 应该够用了吧?

然而,坑是一个接一个的不断。
1.我的远程服务器位于国外,使用 navicate 导入数据的时候极其缓慢,最终我没有等待导入完成就中断了。
2.于是我准备装一个Desktop 桌面环境,再安装 navicate 并导入数据,最终 ubuntu24 安装完桌面套件【xrog、vnc、kde】之后各种报错【一般来说,都是安装系统的时候选择好是 Server 还是 Desktop,但是我们这里是从Server 版本安装套件】 再之我这边没有 IPMI 权限。最终就不了了之了。

3.然后我选择让 数据库 从服务器本地导入 数据文件。再摸索了许久之后【用命令行导入,用其他方式导入均失败】,我最终选择了还是利用 Navicate!!

输入图片说明

这里需要修改数据库的配置文件。

我最终手动执行了十个导入命令之后,总算将数据入库了。

4.又遇到了那个问题,数据库查询及其缓慢,即便是使用高性能服务器。

4.1 优化一下数据库结构,建立索引,但是我导入的时候没有建立索引,后建立及其缓慢,卒
4.2 重新导入,以某字段为索引导入,导入到一半,卒

5.于是乎我在数据库中创建了一个内存表。选择从原始表中复制到 内存表【速度仍然及其缓慢】
6.我便修改了导入语句,从文件中直接导入到内存表中,可是意外发生了!【居然爆内存了,64G 也爆,我并没有完整的导入整个数据表,只是选择自定义导入了其中两个字段】
7.我又重新购买了一台 128G 运行内存的数据库,这次重新导入之前建立索引,但是发现导入完成之后的数据只有 将近 240w 条。 这不对啊?! 吓死我了。
8.经过排查之后发现,有一些数据是重复的。翻来覆去之后,写了一个 python 脚本,用于提取唯一字段。【速度和导库相比真是秒天秒地秒空气,很快我就得到了唯一字段。】 于是,数据库方案卒。

9.下图是利用 youtube-api 探查视频时长的数据,期间购买了不少的 google 账号,然后 开通 youtube-api 的权限用来探测数据,因数据有重复后,又重新探查了一番。
输入图片说明

正式开始数据下载。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部