一般情况下,在基于R语言的项目中,我们会把所有数据和代码放在一个文件夹下,并且全部同步到GitHub上。团队里其他人想要重复这个项目的话,直接从GitHub上clone该项目仓库到自己电脑上,即可运行。对于项目负责人本人而言,其结构如下:

但是当原始数据太大的时候,直接上传到GitHub上比较麻烦,因此我之前是通过DropBox等云盘分享原始数据,通过GitHub共享其他项目文件(主要是代码),相当于在本地电脑上,所有文件都储存在一个文件夹上,但是在云端,数据和代码分别存储。这时候,结构如下图。这种情况下,如果别人要重复该项目,除了需要clone我GitHub上的云端仓库之外,还要下载我DropBox中的数据,并且把该数据放到本地的指定路径下。虽然后者(即下载数据步骤)也可以通过R代码实现,但是还是有点麻烦。

再进一步,当多个项目共用一个原始数据的时候,这个结构图就变成了下图的样子。相当于在本地电脑上,要同时存储两份相同的原始数据。当数据量比较大的时候,这样就比较费本地的存储空间。

因此,想请教大家:在原始数据较大、且多个项目共用一个原始数据的团队合作项目中,如何组织本地及云端的文件夹比较方便呢?主要需求是:
(1)所有文件尽量放在一处。上述例子中,在云端,数据和代码分别存放在两个不同的地方,不符合该需求。
(2)节省本地空间。上述例子中,当本地同时运行项目1和项目2时,需要在本地项目1和项目2文件夹中,分别存储一份相同的原始数据拷贝,不符合该需求。
(3)提高同步速度。上述例子中,虽然项目1和项目2共用一份原始数据,但是实际上他们用的是不同的子集。我目前的方案中,是将整个原始数据分别下载到项目1和项目2的文件夹中,然后再进行数据处理(如取子集)。由于原始数据较大,下载过程非常耗时。好在原始数据通常不会变化,因此下载一次即可。但是,是否有更好的办法呢?
当然,上面这些需求可能是鱼和熊掌不可兼得的。此外,个人觉得,这个问题的解决方案可以包含流程设计和技术两个维度。前者指文件夹结构和同步步骤应该如何设计等,后者则是指有哪些工具可以帮助实现这种设计。如果有任何想法,都欢迎交流呀。

  1. 大的数据文件,尤其还是二进制文件的话并不推荐用git来追踪,如果非要用git的工作流,那么可以考虑git-lfs或者用github的release功能。

  2. 本地如果真的是同一份数据的话,不妨将数据统一存储在一个位置,分别在项目1和项目2里建立link指向数据文件即可。

    可以将数据放在能生成外链的服务器上,然后本地直接读远程的数据?

      vickkk 谢谢回复呀。如果把我问题原帖的最后一图中的“从云端下载拷贝到本地”换成“读取到本地”,其实就是你说的方案。当时之所以下载到本地,主要原因是这之后的数据读取处理比较快。但是全部下载下来又费时间,而且实际用到的只是一部分数据。因此,现在在考虑这样的流程:(1)在云端先进行处理;(2)将所需的数据子集下载到本地,进行后续分析。其中第(1)步需要云端数据库,因为对数据库技术不了解,还在查找相关资料中;目前正在尝试的是MongoDB。

      fenguoerbian 感谢回复。之前在个人项目中设置过一次LFS,但是现在做的是团队项目,如果每个人都要设置的话,可能有点麻烦……唉,这么一说完,就觉得归根结底还是我懒?orz……

      2 个月 后

      @KANG1943 楼主可以看下 HuggingFace Datasets,Git LFS 的工作流程,可以用组织账号建数据集设置仅组织内可见,最重要的是,没有 GitHub 的每账号每月 1G 的 LFS 流量限制。还可以使用一些比较高级的功能,比如 loading script 和 iterable dataset。

      在技术和条件允许的情况下,我支持把所有可以的对象都按照代码处理,完全融入现有的开发流程。与之相对的,网盘之类的东西很难用代码控制和自动化,也随服务商的变化而变化,生命周期的持久度堪忧。

      说个题外话,楼主画图水平好高,很容易理解,点赞

      3 个月 后