【发布时间】:2020-04-27 19:25:22
【问题描述】:
虽然 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)——文本文件。它没有创建目录占位符 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
【问题讨论】:
-
您的性能问题是关于使用 gcsfuse 将存储桶绑定到本地目录的问题?
-
@guillaumeblaquiere 是的,使用
--implicit-dirs,即使列出 2 个文件的小目录也需要几秒钟。gcsfuse这样不切实际。
标签: google-cloud-storage cp gsutil gcsfuse