在GCS中获取文件计数和文件夹总大小的最快方法?

时间:2020-09-14 22:03:08

标签: node.js linux google-cloud-platform google-cloud-storage gsutil

假设有一个带有根文件夹的存储桶,它包含子文件夹和文件。有什么方法可以获取根文件夹的文件总数和总大小?

我尝试了什么: 使用gsutil du可以快速获取大小,但不会得到计数。如果使用gsutil ls ___ ,我将得到列表和大小,如果将其与awk进行管道相加并求和。我可能会得到预期的结果,但是ls本身要花费很多时间。

那么有没有更好/更快的方法来解决这个问题?

2 个答案:

答案 0 :(得分:2)

如果要长时间跟踪存储桶中的对象数,则Cloud Monitoring提供metric“ storage / object_count”。该指标每天大约更新一次,这对于长期趋势而言更有用。

关于即时计数,不幸的是gsutil ls可能是您最好的选择。

答案 1 :(得分:0)

要做某种对象列表是一种方法-gsutil中的lsdu命令在后台执行对象列表API调用。

如果要获取存储桶中所有所有对象的摘要,请选中Cloud Monitoring(as mentioned in the docs)。但是,如果您需要对象的子集的统计信息,这将不适用-GCS不支持实际的“文件夹”,因此,“文件夹” foo下的所有对象实际上都是使用通用前缀命名的对象,foo/

如果要分析给定前缀下的对象数量,则需要执行对象列表API调用(使用客户端库或gsutil)。列表操作每个响应只能返回这么多对象,因此是分页的,这意味着如果在所需前缀下有很多对象,则必须进行多次调用。目前,每个列表调用的结果数上限为1,000。例如,如果要列出200,000个对象,则必须进行200次连续的API调用。

关于gsutil的ls的注释:

在多种情况下,gsutil在完成ls命令时可以做“额外”工作,例如,使用-L标志进行“长”列出或使用{{ 1}}标志。为了节省时间并执行尽可能少的列表,以获得某个前缀下的字节总数,您需要使用gsutil的通配符支持来进行“固定”列表,例如:

-r

或者,您可以尝试使用一种GCS客户端库(例如the Python library及其list_blobs功能)编写脚本。