Хотя 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
--implicit-dirs
перечисление даже крошечного каталога из 2 файлов занимает секунды.gcsfuse
таким образом нецелесообразно. - person Jerry101   schedule 11.01.2020