Как создавать версии одного и того же файла в базе данных и на диске, например менеджер документов BaseCamp

Если вы использовали Basecamp, есть страница менеджера документов, которую вы также можете найдите демо здесь. Мне понравилась функция создания версий, когда один и тот же файл загружается дважды, [опционально пользователь указывает создать файл как новую версию]. Как вы думаете, как хранятся файлы в DATABASE в виде записей и в DISK в виде файлов. Из моей проверки кажется, что файлы сохранены, как показано ниже.

Структура

[user_folder]
 [project_name]
  [file_name]
    [V1/V2/V3]

например, принимая во внимание ниже

Пример

  1. имя пользователя мак

  2. название проекта Изорд и

  3. имя файла base.html

он имеет 2 версии, вот структура каталогов

   [mak]
     [izord]
      [base]
        [V1]
         base.html
        [V2]
          base.html

Я могу ошибаться в своих предположениях, но именно поэтому я здесь, чтобы исправить это.

Вопрос

  1. Как вы думаете, как я могу организовать файлы на диске в этой ситуации?
  2. Есть ли у вас готовая, уже разработанная структура таблицы для сохранения сведений о файлах?
  3. Как сортировать файлы из таблицы по алфавиту, как в демонстрационном видео. Они поддерживают своего рода другой стол?

person Deeptechtons    schedule 13.10.2011    source источник


Ответы (1)


Прежде всего, я почти уверен, что они хранят файлы в 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> (настоящих каталогов в 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>

person Anton Gogolev    schedule 13.10.2011
comment
да, они могут использовать amazon, но при просмотре этого видео, когда человек наводит курсор на ссылки на файлы, кажется, что он находится в каталоге. не так ли? да, я согласен с пунктом 2, потому что так выглядела их структура из этого видео projects/631767/file/3152703/filename, projects/631767/file/3152700/filename часть 31527 может быть чем-то хэшем, тогда они добавляют 01,02,03 для версий. - person Deeptechtons; 13.10.2011
comment
Обычный способ размещения материалов в S3 — это иметь ссылку на ваш сайт, который затем генерирует так называемый предварительно подписанный URL-адрес и перенаправляет обратно на него. - person Anton Gogolev; 13.10.2011