Хотя Google Cloud Storage является хранилищем плоских объектов, для которого не нужны записи каталога, добавление заполнителей каталога psuedo (пустые записи с именами, заканчивающимися на /
) делает gcsfuse намного быстрее . Вы можете не указывать параметр gcsfuse --implicit-dirs
и просматривать каталоги GCS с очень работоспособной производительностью, чего нельзя сказать о заполнителях.
Q. Есть ли способ выдать команду gsutil наподобие gsutil cp -r your_directory gs://your-bucket/
, которая создаст заполнители каталогов при загрузке файлов?
Альтернативой является вызов API GCS, но 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
mount:
$ find your_directory
find: your_directory: No such file or directory
В gcsfuse --implicit-dirs your-bucket your-bucket
mount:
$ 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