我感觉很愚蠢,但我想知道GitHub和Dropbox如何存储用户文件,因为我遇到了类似的问题,我需要存储用户的项目文件。
是否就像将项目文件存储在服务器中的某个位置并将该位置称为数据库中的字段,还是有其他更好的方法?
感谢。
答案 0 :(得分:1)
GitHub使用Git存储存储库,并从Ruby应用程序访问这些存储库。他们曾经用Grit这个Ruby库做到这一点。 Grit是为了在Ruby中实现Git而编写的,但已被rugged取代。在其他语言中有Git重新实现,例如Java的JGit和Python的Dulwich。 This presentation提供了有关GitHub多年来如何变化的详细信息,值得观看/浏览幻灯片。
如果你想存储Git存储库,你想要做的是将它们存储在文件系统(或其集群)上,然后在数据库中有一个指针指向文件系统所在的位置,然后使用像Rugged或JGit或Dulwich这样的库来从Git存储库中读取内容。
Dropbox将文件存储在Amazon的S3服务上,然后针对安全性实现一些包装器,以此类推。 This paper描述了Dropbox使用的协议。
您提出的实际问题是如何存储用户文件。简单的答案是......在文件系统上。有许多流行的Web框架的插件,用于执行用户文件上载和文件管理。例如,Django有Django-Filer。您在滚动自己的文件上传管理系统时遇到的困难是构建一种明智的权限(因此用户只能下载他们有权下载的文件),因此值得研究各种框架插件的方式。做到这一点。