加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

rest – 可能的多线程算法列出大型S3存储桶中的所有密钥?

发布时间:2020-12-15 02:30:35 所属栏目:Java 来源:网络整理
导读:在包含大量密钥的S3存储桶中,通过REST api列出密钥是一个非常缓慢的过程 您一次只能列出1000个键. 确定第5001个密钥(据我所知)的唯一方法是列出前1000个密钥,根据响应中的下一个标记列出下一个密钥,然后递归直到达到5001. S3 REST api请求的延迟非常高,对100
在包含大量密钥的S3存储桶中,通过REST api列出密钥是一个非常缓慢的过程

>您一次只能列出1000个键.
>确定第5001个密钥(据我所知)的唯一方法是列出前1000个密钥,根据响应中的下一个标记列出下一个密钥,然后递归直到达到5001.
> S3 REST api请求的延迟非常高,对1000个密钥的请求通常需要几秒钟.

鉴于制作100个并发键列表REST请求不应该减慢任何单个请求的速度,否则这个过程将通过并行化进行优化.但是如果我的算法是“愚蠢的”并且只是将可能的密钥空间分成预定义的标记(例如,”,’a’,’b’,’c’,’d’,’e’…… )它不会真正加快列表中的列表键,其中每个键以“images /”开头

所以我想知道是否真的有S3经验的人知道更好的方法来遍历存储桶的密钥空间,或者是否有人尝试使用自适应(即“非愚蠢”)算法来改进并发的密钥列表.

解决方法

也许某种形式的“二元搜索”算法会有所帮助吗? EG以”和’m’开头,然后是中途,等等.我认为你最终会得到每个键最多两次左右 – 当你已经拥有’nextmarker’时,你就停止要求更多.

如何挑选多少开始?我认为可能会在每个周期进行细分:启动”然后当这些结果返回时,如果”结果表明更多的键,则在该搜索上启动’nextmarker’并在’nextmarker’和’z’之间的一半进行新的搜索.重复.使用类似哈希的东西只存储一次所有键.

由于所有请求都是以不同的线程等形式进入的,因此您需要锁定才能添加所有密钥.然后你有一个问题就是保持锁定打开不会减慢速度,所以它取决于你正在使用的语言等.

如果您的进程在与S3文件相同的区域中的EC2实例上运行,则可以更快地执行此操作.假设文件是??美国“标准”.然后你很幸运,你可以使用ruby和Ironworker之类的东西进入并下载所有密钥.完成后,它可以发布到您的服务器,或在S3上创建一个文件,该文件是所有密钥或类似的列表.对于不同的地区或语言,您可能需要启动自己的EC2实例.

我发现在EC2实例上S3键列表要快得多,因为每个请求都有很多带宽(你不需要为EC2付费). S3没有gzip响应,这是非常蓬松的XML,所以你和S3之间的带宽是至关重要的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读