我在Google Cloud存储桶中存储了一组文件-100k文件,总计1 TB。我需要一种从存储桶中有效下载各种文件子集的方法。
有一种方法可以将所需文件列表传递到gsutil
:python generate_filenames.py | gsutil -m cp -I .
,但是对于我的情况来说非常慢(大约2 MB /秒)。
或者,我注意到如果使用通配符模式-gsutil -m cp gs://bucketname/folderpath/* .
-下载速度大约是10倍。我可以下载所有文件,然后删除不想要的文件,但是如果文件集很小,仍然效率不高。
是否有任何方法可以利用gsutil
仅下载指定的文件列表,但速度仍高于2 MB /秒?
答案 0 :(得分:1)
尝试随机化输入列表中文件的顺序。 GCS将文件存储在按对象键分布的分片上,因此在词法上相似的文件很可能存储在同一分片上。如果您试图从单个分片中提取大量小文件,则可能会导致性能下降。根据文件的命名约定,使用此策略可能会受到限制。请参阅using a naming convention that distributes load evenly across key ranges上的文档。
除此之外,还有许多会影响性能的变量:您的互联网连接,您的GCS存储类,您的机器等。Google Cloud提供了一个名为perfdiag
的工具,可以帮助诊断这种情况。问题。