Может ли gsutil создавать записи псевдокаталога, необходимые для ускорения gcsfuse?

Хотя Google Cloud Storage представляет собой плоское хранилище объектов, которому не нужны записи в каталогах, добавление заполнителей псевдокаталогов (пустые записи с именами, оканчивающимися на /) делает gcsfuse намного быстрее. Вы можете не использовать параметр gcsfuse --implicit-dirs и просматривать каталоги GCS с очень хорошей производительностью, что не является случае без заполнителей.

В. Есть ли способ отправить команду gsutil, например gsutil cp -r your_directory gs://your-bucket/ которые будут создавать заполнители каталогов при загрузке файлов?

Альтернативой является вызов GCS API, но у gsutil есть много полезных функций, включая параллельную загрузку и обработку повторных попыток.

Пример

Сделайте локальное дерево:

$ mkdir -p your_directory/subdir
$ echo hi > your_directory/hi.txt
$ echo there > your_directory/subdir/there.txt

$ ls -lR your_directory
total 8
-rw-r--r--  1 jerry  staff   3 Jan 21 17:24 hi.txt
drwxr-xr-x  3 jerry  staff  96 Jan 21 17:24 subdir/

your_directory/subdir:
total 8
-rw-r--r--  1 jerry  staff  6 Jan 21 17:24 there.txt

gsutil скопируйте его в GCS:

$ gsutil cp -r your_directory gs://your-bucket/
Copying file://your_directory/hi.txt [Content-Type=text/plain]...
Copying file://your_directory/subdir/there.txt [Content-Type=text/plain]...
/ [2 files][    9.0 B/    9.0 B]
Operation completed over 2 objects/9.0 B.

$ gsutil ls -lr gs://your-bucket/your_directory
gs://your-bucket/your_directory/:
         3  2020-01-22T01:25:38Z  gs://your-bucket/your_directory/hi.txt

gs://your-bucket/your_directory/subdir/:
         6  2020-01-22T01:25:38Z  gs://your-bucket/your_directory/subdir/there.txt
TOTAL: 2 objects, 9 bytes (9 B)

Обратите внимание, что gsutil создал только 2 объекта (BLOB) — текстовые файлы. Он не создавал большие двоичные объекты-заполнители каталогов your_directory/ или your_directory/subdir/.

В креплении gcsfuse your-bucket your-bucket:

$ find your_directory
find: your_directory: No such file or directory

В креплении gcsfuse --implicit-dirs your-bucket your-bucket:

$ find your_directory
your_directory
your_directory/hi.txt
your_directory/subdir
your_directory/subdir/there.txt

медленно.

Вернемся к монтированию gcsfuse your-bucket your-bucket, мы можем сделать так, чтобы текстовые файлы отображались, создав заполнители каталога:

$ mkdir your_directory
$ ls your_directory
hi.txt

$ mkdir your_directory/subdir
$ ls your_directory
hi.txt  subdir/

$ ls your_directory/subdir/
there.txt

person Jerry101    schedule 10.01.2020    source источник
comment
Ваша проблема с производительностью связана с привязкой вашего ведра к вашему локальному каталогу с помощью gcsfuse?   -  person guillaume blaquiere    schedule 10.01.2020
comment
@guillaumeblaquiere Да, с --implicit-dirs перечисление даже крошечного каталога из 2 файлов занимает секунды. gcsfuse таким образом нецелесообразно.   -  person Jerry101    schedule 11.01.2020


Ответы (1)


Если я правильно понял, и вы хотите загружать файлы, создавая пустые папки (которые в фоновом режиме представляют собой просто пустые файлы с «/» в конце их пути), gsutil cp -r your_directory gs://your-bucket/ поможет.

Для справки здесь приведено как работают подкаталоги в GCS и команда gsutil cp

person Jose V    schedule 20.01.2020
comment
Спасибо, но, увы, если нет параметра конфигурации или другого параметра, gsutil cp -r your_directory gs://your-bucket/ не создает объекты-заполнители пустого каталога your_directory/, your_directory/subdir/ и т. д., и, таким образом, gcsfuse (без --implicit-dirs) не увидит ни один из этих файлов. - person Jerry101; 21.01.2020
comment
Не могли бы вы уточнить, что вы подразумеваете под пустыми объектами-заполнителями каталогов? - person Jose V; 21.01.2020
comment
Под пустыми объектами-заполнителями каталогов я подразумевал BLOB-объекты GCS нулевой длины с именами, заканчивающимися на /. Без них gcsfuse не увидит your-bucket/your_directory или его содержимое (если не смонтировано с опцией --implicit-dirs). См. пример, который я добавил к вопросу, и см. github .com/GoogleCloudPlatform/gcsfuse/blob/master/docs/ - person Jerry101; 22.01.2020