trueai-org / mdrive

一个基于阿里云盘官方 API 授权的自动同步和备份工具,支持云盘挂载到本地,支持本地存储,支持加密,多平台、安全、自动化的数据管理方案。
https://duplicati.net
Apache License 2.0
153 stars 26 forks source link

加载云盘存储文件优化建议 #25

Open Zrincet opened 3 months ago

Zrincet commented 3 months ago

目前的逻辑是在同步开始时会通过分页遍历获取一遍阿里云盘所有的文件信息,如果云盘原本文件过多,则会造成获取时间过长,比如我的云盘单是获取一遍文件就要花费36分钟。由于获取的文件是放在变量中,Docker容器内存占用最高达到2.84G。但是最终所使用到的只是设置的备份目标目录下的文件情况。

微信截图_20240711162035

优化建议: 只对设置的备份目录进行遍历获取文件以及文件夹情况,不再获取云盘其他无关文件的信息。以便减少花费时间、资源占用以及减少对阿里云盘api调用次数

trueai-org commented 3 months ago

可以的,非常感谢您的建议,受阿里云 api 的限流限制,如果整个网盘文件较少时,例如:低于1万,那么采用目前的方案可以快速检索文件。 当如果整个网盘文件较多时,目前的方案就不使用了,后面会加入一个选项,检索文件模式:全盘检索/目录检索。

trueai-org commented 3 months ago

目前阿里云盘,目录检索需要递归嵌套一次一次的 api 执行,且获取列表 api 速率有严格的限制,因此之前没有优化。 预计会在 3.x 版本对此问题做出优化。

Zrincet commented 3 months ago

目前阿里云盘,目录检索需要递归嵌套一次一次的 api 执行,且获取列表 api 速率有严格的限制,因此之前没有优化。 预计会在 3.x 版本对此问题做出优化。

感谢您的付出,我看到阿里云盘的搜索接口的query参数是可以限定parent_file_id参数,是不是可以平替获取列表 api,或者这个搜索接口也有10秒150次的限制,那就没有区别了

trueai-org commented 3 months ago

是的,接口有提供 parent_file_id 字段,但是如果备份目录文件夹过多,例如:1万个文件夹,10000/4 = 2500s ≈ 40 分钟,此 api 限流 4次/秒,之前和阿里云盘团队沟通后,阿里云盘技术那边考虑到各种问题,提供的最佳方案是全盘检索模式。 以后会提供一个选项,可以让用户自由选择加载文件的方式。

Zrincet commented 3 months ago

是的,接口有提供 parent_file_id 字段,但是如果备份目录文件夹过多,例如:1万个文件夹,10000/4 = 2500s ≈ 40 分钟,此 api 限流 4次/秒,之前和阿里云盘团队沟通后,阿里云盘技术那边考虑到各种问题,提供的最佳方案是全盘检索模式。 以后会提供一个选项,可以让用户自由选择加载文件的方式。

soga,了解了,感谢!

xmzcl commented 2 months ago

我也有这个问题,每次加载云盘文件时间太长了。希望可以早日解决~

trueai-org commented 2 months ago

OK,收到我们这边尽快处理。