Прежде всего, я почти уверен, что они хранят файлы в S3, так что примите это во внимание.
Что касается структуры базы данных, я хотел бы иметь что-то вроде
Account: ID
Project: ID, AccountID
File: ID, ProjectID, Name, ContentType, CurrentRevision
FileRevision: ID, FileID, ContentLength, AmazonS3Key, CreatedAt, CreatedBy
и затем сохраняйте каждый файл в <bucket>/<account-id>/<project-id>/<file-name>
"directory" (в S3 нет реальных каталогов, но они эмулируются с косой чертой).Содержимое файла помещается в соответствующий каталог:
<bucket>/<account-id>/<project-id>/<file-name>
v1
v2
...
v13
Загрузка новой версии файла - это просто вопрос добавления записи v<File.CurrentRevision + 1>
в хранилище S3.
Также обратите внимание, что раскрытиеИдентификаторы учетных записей и проектов, возможно, не являются хорошей идеей, поэтому я бы пошел с хэшами из них: <bucket>/<md5(account-id + salt)>/<md5(project-id + salt)>/<file-name>