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