Хранить 100 миллионов файлов в одном «каталоге» в хранилище, совместимом с S3?

Хранить 100 миллионов файлов в одном «каталоге» в хранилище, совместимом с S3?

У меня есть > 100 миллионов файлов изображений (обложки книг) в виде простого списка файлов в одном «каталоге»:

/images/000000093e7d1825b346e9fc01387c7e449e1ed7
/images/000000574c67d7b8c5726f7cfd7bb1c5b3ae2ddf
/images/0000005ae12097d69208f6548bf600bd7d270a6f
...

Когда-то они хранились на Amazon S3, а теперь на Backblaze B2 (совместимом с S3).

Пока что все работает отлично:

  • сохранение нового файла происходит очень быстро;
  • извлечение существующего файла происходит очень быстро.

Я снова в процессе перехода на iDrive E2 (также совместимую с S3).

Я экспериментирую с их перемещением с помощьюrclone, но после 30 минут ожидания rclone copyзапуска я понял, что rclone не начинает передачу файлов, пока не получит весь список файлов.

Проблема в:

  • быстрый тест rclone lsкаталога /images/показывает, что передача всего списка файлов займет почти 10 часов
  • любая проблема во время передачи (которая может занять много дней) приведет к перезапуску с нуля, заставляя rclone снова загрузить весь список файлов
  • листинг файловстоит денегс B2

Я попробовал настроить rclone на копирование только пакета файлов:

  • rclone copy "backblaze:/images/0000*", с или без *, не находит ни одного файла
  • rclone copy "backblaze:/images/" --include "/0000*"похоже, что также загружает весь список файлов и фильтрует на клиенте

Как ни странно, похоже, что rclone без проблем получает с сервера список файлов, находящихся в заданном «каталоге», например /images/, , но не может сделать то же самое с префиксом, например /images/0000, .

Я думал, что S3 и, соответственно, все S3-совместимые хранилища хранят пути к файлам в виде плоской структуры., и это /был просто персонаж, как и любой другой, и вы могли бы легкосписок файлов с любым префиксом, заканчивающимся на/.

Я ошибаюсь?

Я — мое следующее хранилище (E2),следует ли хранить файлы в подкаталогах, например images/0/0/0/0/, images/0/0/0/1, и т. д., как мы делали в старые добрые времена, храня файлы в традиционной файловой системе?

решение1

Я понял, что rclone не начинает передачу файлов, пока не получит весь список файлов.

Это говорит мне, что ваша проблема не столько в поставщиках хранения, сколько в самом rclone. Решение, которое запускало list-stream, а затем разбивало файлы по мере их поступления, было бы более подходящим, чем то, которому нужен весь список файлов перед работой.

Я думал, что S3 и, соответственно, все S3-совместимые хранилища хранят пути к файлам в виде плоской структуры,

Это определенно то, как это делает S3, что сломало мой мозг администратора файлового сервера, когда я впервые столкнулся с этим. Учитывая, что проблемы здесь, похоже, связаны с метаданными, а не с компоновкой файлов, это, вероятно, не имеет значения.

Связанный контент