perforce和git和svn大文件存储测试对比
测评背景
- 美术资源存在大量小文件、单个文件比较大、文件频繁更新、频繁上传下载、本地仓库损坏需全量重新下载等情况,管理比较困难。
测评总结
- 针对美术资源管理比较困难的问题,我们对市面上的一些资产管理工具,在同一环境下使用线上的真实业务数据进行了测评对比。
综合测评结果
- 针对通用代码管理的问题:Perforce工具在性能和工具体验方面显得更为专业。它能直接兼容很多美术软件,可预览和在线编辑,对美术的工作有很大帮助。除此之外,可以和海外的开发公司、外包公司进行业界统一的对接方式。建议做为首选考虑。其次如果只考虑开源工具,且大文件下载需求不多,git-lfs工具也是一个不错的选择。
- 结合工具性能、操作使用成本、与外部公司对接的便捷性等因素,对工具进行了综合对比,结果可参考下表。
| 工具名称 | GIT-LFS | SVN | Perforce |
| :--------------------- | :------------------- | :------------------- | :------------------------------------- |
| 收费 | 否 | 否 | 是 |
| 小文件处理速度 | 快 | 慢 | 很快 |
| 大文件处理速度 | 慢 | 慢 | 快 |
| 客户端工具 | 社区提供,命令行为主 | 社区提供,命令行为主 | 官方提供 |
| 权限控制 | repo级别 | 目录级别 | 目录级别 |
| 元数据文件空间占用 | 是 | 是 | 否 |
| 首次是否需全部拉取 | 是 | 是 | 否 |
| 软件兼容性 | ide兼容性好 | ide兼容性好 | 美术软件兼容性好,支持预览和在线编辑。 |
| 使用难度 | 难 | 一般 | 比较难 |
| 与外部公司对接的便捷性 | 一般 | 一般 | 比较方便 |
性能测评结果
- 性能方面的测评结果如下:
1 | 1) 针对当前美术资源使用NXN维护成本高,资源上传下载经常卡顿的问题。Perforce在资源的上传下载、权限控制方面有比较好的优势。在大文件场景下perforce比svn快8%,比git-lfs快57%。在小文件场景下perforce比git-lfs快5%,比svn快55.8%。故建议采用Perforce工具,但是需要考虑到价格和上手难度等问题。 |
- 性能测试的数据结论
- 大文件上传时
- perforce比svn快8.6%,比git-lfs快27.2%。
- svn比git-lfs快18.6%。
- 大文件下载时
- perforce比svn快7.6%,比git-lfs快87.3%。
- svn比git-lfs快79.7%。
- 小文件上传时
- perforce比git-lfs快5.8%,比svn快47.4%。
- git-lfs比svn快41.6%。
- 小文件下载时
- perforce比git-lfs快4.3%,比svn快64.2%。
- git-lfs比svn快59.9%。
- 大文件上传时
测评方案
- 基于上面的问题,对市面上已有的工具:Gitlab-LFS、SVN、Perforce, 分别进行了测评调研,内容如下。
测评说明
- 测试使用了一台小小云机器,系统Debian9.6,使用两块SSD磁盘,一块作为服务端,安装有gitlab、svn、perforce服务端进程,一块作为客户端使用,同台机器内测试,减少网络导致的误差。测试机器配置如下:
1 | 系统版本:Debian9.6 |
- 测试数据随机采样了3份,均来自线上的真实数据,里面有美术资源和非美术资源,有大文件也有小文件,详情如下:
名称 | 原始数据总大小(排除.git/.svn) | 文件个数 | 说明 |
---|---|---|---|
数据样例1 | 6.7G | 25217 | 大文件和小文件相对均匀 |
数据样例2 | 9.5G | 14988 | 大文件居多 |
数据样例3 | 1.6G | 119940 | 小文件居多 |
- 测试主要分2个部分:
空间占用
、下载与上传速度
。
测评过程
空间占用测试
- 数据样例1
| 工具类型 | 仓库总大小(包括.git/.svn) | .git/.svn大小 | 原始文件总大小(不包括.git/.svn) |
| :------- | :------------------------ | :------------ | :------------------------------ |
| git-lfs | 14G | 6.5G | 6.7G |
| svn | 14G | 6.7G | 6.7G |
| perforce | 6.7G | 无 | 6.7G |
- 数据样例2
| 工具类型 | 仓库总大小(包括.git/.svn) | .git/.svn大小 | 原始文件总大小(不包括.git/.svn) |
| :------- | :------------------------ | :------------ | :------------------------------ |
| git-lfs | 19G | 9.5G | 9.5G |
| svn | 19G | 9.5G | 9.5G |
| perforce | 9.5G | 无 | 9.5G |
- 数据样例3
| 工具类型 | 仓库总大小(包括.git/.svn) | .git/.svn大小 | 原始文件总大小(不包括.git/.svn) |
| :------- | :------------------------ | :------------ | :------------------------------ |
| git-lfs | 1.8G | 0.2G | 1.6G |
| svn | 2.9G | 1.4G | 1.6G |
| perforce | 1.6G | 无 | 1.6G |
下载与上传速度测试
- 数据样例1
工具类型 | 原始数据总大小(不包括.git/.svn) | 上传时间 | 下载时间 |
---|---|---|---|
git-lfs | 6.7G | 416秒 | 2013秒 |
svn | 6.7G | 642秒 | 368秒 |
perforce | 6.7G | 435秒 | 57秒 |
- 数据样例2
工具类型 | 原始数据总大小(不包括.git/.svn) | 上传时间 | 下载时间 |
---|---|---|---|
git-lfs | 9.5G | 1101秒 | 3867秒 |
svn | 9.5G | 680秒 | 407秒 |
perforce | 9.5G | 482秒 | 72秒 |
- 数据样例3
工具类型 | 原始数据总大小(不包括.git/.svn) | 上传时间 | 下载时间 |
---|---|---|---|
git-lfs | 1.6G | 327秒 | 24秒 |
svn | 1.6G | 963秒 | 121秒 |
perforce | 1.6G | 239秒 | 17秒 |
测评图表
空间大小占用
- Y轴为数据大小,单位G。
- X轴为指标类型:
- 仓库总大小(包括.git/.svn) total
- .git/.svn大小metadata
- 原始文件总大小(不包括.git/.svn) raw。
上传与下载速度
- Y轴为上传数据或者下载数据的时间,单位秒。
- X轴为工具类型即git-lfs、svn、perforce。
测评分析
- 测评分析如下,下面的百分比数据为文件下载或上传占用时间百分比,比如perforce(15.6%) 代表样例3小文件上传中,perforce占用的时间百分比,即15.6%=239.0 / (327+963+239)
| 评估项 | 具体分析 | 分析结果 |
| :--------------- | :----------------------------------------------------------- | :-------------------------------------------- |
| 样例文件个数 | 样例2大文件居多、样例3小文件居多、样例1大文件小文件相对均匀 | 样例3 > 样例1 > 样例2 |
| 样例原始数据大小 | 样例2大文件居多、样例3小文件居多、样例1大文件小文件相对均匀 | 样例2 > 样例1 > 样例3 |
| 空间管理 |
1) perforce无需存储元数据,相对节省客户端磁盘空间。
2) 随着文件个数增多,svn的元数据大小明显高于git-lfs,会更多的占用客户端磁盘空间。
3) 原始文件的总大小在每个工具均保持一致。 | perforce > git > svn |
| 小文件上传速度 | perforce优于svn、git-lfs,但没有明显优于git-lfs。svn的上传速度最差。 | perforce(15.6%) > git-lfs(21.4%) > svn(63%) |
| 大文件上传速度 | perforce的上传速度明显优于svn和git-lfs, git-lfs的上传速度最差 | perforce(21.4%)> svn(30%) > git-lfs(48.6%) |
| 小文件下载速度 | perforce的下载速度优于svn和git-lfs, svn的下载速度最差 | perforce(10.5%) > git-lfs(14.8%) > svn(74.7%) |
| 大文件下载速度 | perforce的下载速度明显优于svn和git-lfs, git-lfs的下载速度最差 | perforce(1.7%) > svn(9.3%) > git-lfs(89%) |
测评总结
-
从实际的业务数据测试来看:
- perforce无需占用客户端空间,且不管大文件还是小文件场景均优于git-lfs和svn。
- 相比svn来说,git-lfs比较适合小文件场景,无论是上传速度还是下载速度均优于svn。
- 相比git-lfs来说,svn比较适合大文件场景,无论是上传速度还是下载速度均优于git-lfs。
-
客户端情况
- 无论是git-lfs还是svn,在下载或者上传文件时,会大量消耗客户端的内存,跑满一个cpu核心。建议客户端机器至少为16G内存并配置固态硬盘。
- 下图为Mac机器使用git客户端上传样例2数据时的截图。
- 下图为小小云本地机器git上传样例2数据时的截图。
- 下图为本地机器svn上传数据时的截图。
- 下图为本地机器svn上传数据时的截图。
- 下图为Mac机器使用git客户端上传样例2数据时的截图。
- 无论是git-lfs还是svn,在下载或者上传文件时,会大量消耗客户端的内存,跑满一个cpu核心。建议客户端机器至少为16G内存并配置固态硬盘。
- 结论
- 大文件上传时
- perforce比svn快8.6%,比git-lfs快27.2%。
- svn比git-lfs快18.6%。
- 大文件下载时
- perforce比svn快7.6%,比git-lfs快87.3%。
- svn比git-lfs快79.7%。
- 小文件上传时
- perforce比git-lfs快5.8%,比svn快47.4%。
- git-lfs比svn快41.6%。
- 小文件下载时
- perforce比git-lfs快4.3%,比svn快64.2%。
- git-lfs比svn快59.9%。
- 大文件上传时
- 当时的测试命令(备忘)。
1 | svnadmin create /home/svn/git_lfs |
赞赏一下