Как добиться хранения дублированных файлов в Amazon S3? - PullRequest
5 голосов
/ 14 сентября 2011

Мне интересно, как лучше всего создать дедуплицированное хранилище файлов в одном хранилище в Amazon S3 Например, если у меня 3 одинаковых файла, я бы хотел сохранить файл только один раз. Есть ли библиотека, API или программы, чтобы помочь реализовать это? Эта функциональность присутствует в S3 изначально? Возможно, что-то, что проверяет хэш файла и т. Д.

Мне интересно, какие подходы люди используют для достижения этой цели.

1 Ответ

5 голосов
/ 31 мая 2012

Вы могли бы, вероятно, свернуть свое собственное решение, чтобы сделать это.Что-то вроде:

Чтобы загрузить файл:

  1. Сначала создайте хеш-файл, используя SHA-1 или более сильный.
  2. Используйте хэш для присвоения именифайл.Не используйте действительное имя файла.
  3. Создайте своего рода виртуальную файловую систему для сохранения структуры каталогов - каждый файл может быть просто текстовым файлом, который содержит вычисленный хэш.Эта «файловая система» должна быть размещена отдельно от хранилища больших двоичных объектов для предотвращения конфликтов имен - как в отдельном сегменте.

Для загрузки последующих файлов:

  1. Рассчитатьхеш, и загружайте файл больших двоичных данных, только если он еще не существует.
  2. Сохраните запись каталога с хешем в качестве содержимого, как для всех файлов.

Для чтенияфайл:

  1. Откройте файл из виртуальной файловой системы, чтобы найти хеш, а затем получите реальный файл, используя эту информацию.

Вы также можете сделать эту техникуболее эффективна за счет загрузки файлов в блоках фиксированного размера и дедупликации, как указано выше, на уровне блоков, а не на уровне полного файла.Каждый файл в виртуальной файловой системе будет содержать один или несколько хэшей, представляющих цепочку блоков для этого файла.Это также имело бы то преимущество, что загрузка большого файла, который незначительно отличается от другого ранее загруженного файла, потребовала бы намного меньше памяти и передачи данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...