对象存储 ListObject 有啥值得思考的?

本文探讨了如何列举云存储桶中的对象,详细介绍了ListObject(GET Bucket)API的请求参数如prefix、marker和max-keys,并分析了在海量对象场景下如何高效地进行列举。通过举例说明,指出了对象列表有序性的重要性以及由此带来的性能挑战。同时,文章提到了公有云服务商在面对这些挑战时所采取的不同策略,强调了在设计和实现列举功能时需要考虑的平衡点。
摘要由CSDN通过智能技术生成

如何列举桶中对象

云存储服务对业务提供基础的数据上传、下载能力,以简单易用作为重点,但有些时候,我们有列举需求。列举是什么意思?比如我们往一个 bucket 里面上传了一些对象,但是我们不知道名字,那么只能让存储系统来告诉你,这个 bucket 里对象的列表。“列举”这是一个简单的需求,但是也有隐形的约束或者前提需要明确。对象存储一把应对的场景是海量对象(上亿级甚至更多),这种前提下,提供的列举功能就不再简单了。

怎么列举对象?

列举对象(List Object)也叫 GET Bucket,用于列出该存储桶内的部分或者全部对象。该 API 的请求者需要对 Bucket 有读权限。

请求参数

OSS,COS,S3 等公有云厂商对于请求参数基本都是一致的:

  • prefix :对象匹配前缀,用于限定响应中只匹配该前缀的key 的对象,非必选;
  • delimiter :字符分隔符(这个没啥重要的,只是数据展示的一个部署),非必选;
  • encoding-type :指定编码方式,默认是 url encode 的编码方式,非必选;
  • marker :起始对象键标记(用来找到其实位置的锚点),非常重要;
  • max-keys :单次 LIstObject 请求返回最大的条目数量,默认值一般是 1000;

这 5 个参数是公有云厂商 ListObject 接口都会提供的,也是 S3 协议的一部分,基本上不会有其他偏差(发现 COS 的 max-keys 默认值是 1000,OSS 的默认值是 100)。delimiter,encodeing-type 这两个参数不会影响数据内容,只是数据展示的一个选项,所以重点说下 prefix,marker,max-keys 这三个参数。为什么单独说这三个参数,因为这三个参数会影响到你返回的数据内容

prefix

这个理解相对简单,其实就是一个字符串匹配,比如我只想获取到 test_ 开头的对象,那么就可以通过这个参数匹配。prefix 允许你对对象做一个简单的过滤。

举个例子,我的一个 bucket 下面有下面这 6 个对象,可以用 prefix = path1/</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值