如何有效地枚举aws3密钥p

2024-10-01 00:34:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个应用程序,它需要列出存储在aws3中的大量对象(比如5亿到10亿个对象)。直接通过分页列出对象需要几周时间。我想将列表并行化,但要有效地实现这一点,我需要映射基本上未知的键空间。在

对于更多背景,AWS允许您在ListBuckets操作中提供前缀和分隔符。请看这里:http://docs.aws.amazon.com/AmazonS3/latest/dev/ListingKeysHierarchy.html

所以,看起来我需要一个能够枚举未知S3键空间(前缀空间?)的算法并尝试将发现的前缀分组到大约[X]个大小相等的bucket中,这些bucket可以被并行化,以便进行均匀的采样和快速的列表。在

高级伪代码:

  1. 搜索[a-9a-3a]的字母组合
  2. 对于任何返回超过max keys键的搜索(我们不知道确切的大小),使用前缀[discovered prefix]+[0-9a-z]执行后续的GETs。如果搜索返回的关键字介于1-999之间,请添加到单独的存储桶列表
  3. 一旦我们对尽可能均匀地分配键(可能在N个递归步骤之后)感到满意,任务工作者就开始列出他们自己的bucket

挑战:

  • 构建一个均匀的抽样分布以发送给工人列表。在
  • 需要尽量减少一个工人需要做所有工作的机会。在
  • 如果所有的前缀都以“aaaaaaaaaa”开头呢?=)

目标是以编程方式发现和分组前缀,以便对未知前缀结构的列表进行均匀采样和并行化。任何关于算法,链接,例子的想法,将不胜感激!在


Tags: 对象算法aws应用程序httpdocs列表bucket