运行带分隔符的 S3 API ListObjectV2 的成本是多少?

问题描述 投票:0回答:1

假设我有一个巨大的 S3 存储桶,其中包含数十亿个文件,这些文件以分层方式组织,就像在标准文件系统中一样。我关心的是 S3 中的

ls
操作性能,例如下面的操作性能相当于
ls /

$ aws s3api list-objects-v2 --bucket my-huge-bucket --delimiter /
{
    "CommonPrefixes": [
        {
            "Prefix": "dir1/"
        },
        {
            "Prefix": "dir2/"
        }
    ],
    "RequestCharged": null
}

在文件系统中,如果我想列出根下的所有目录(

ls /
),我知道这只会列出链接到根inode的子inode,并且不会扫描文件系统中的所有对象来响应此操作。

现在在 S3 中,因为它没有与标准 FS 中相同的 inode 概念,事实上,所有对象都由恰好允许名称中的

/
的键映射来创建“虚拟”概念目录,我关心此类操作的性能。 S3 会在幕后扫描存储桶中的所有对象键,以计算您列出的目录下的下一个目录(例如 root /),还是会足够智能,只考虑从根开始具有不同前缀的文件?

amazon-s3
1个回答
0
投票

如果您仅谈论公共 S3 API

要获取前缀下的 a 目录,您需要在 ListObjectsV2 上执行 while 循环,并在找到第一个以

/
结尾的键时中断。

要获取前缀下的 all 第一级目录,您需要列出整个存储桶,因为您永远不知道下一个 ListObjectsV2 调用的响应是否会有以

/
结尾的键。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.