1 个不稳定版本
0.1.0 | 2021 年 3 月 1 日 |
---|
#13 在 #smaller
80 每月下载次数
49KB
1K SLoC
s3-batch-put-object
通过减少 S3:PutObject 调用的次数来将许多对象聚合成更少的 S3 调用
概述
创建大量 PutObject 调用的作业可能因使用 S3 PutObject API 的交易成本而效率低下。
该库为调用应用程序提供与 rusoto_s3 类似的接口,并且不是立即将对象写入 S3,而是将它们暂存到本地的 tar 文件。调用应用程序可以控制包含最后一批对象的 tar 文件写入 S3 的频率。
S3BatchPutClient
是线程安全的,可以将多个并发线程的写入合并成单个批次。
高效检索
生成的 tar 文件可以简单地下载以消费每个批次。
S3BatchPutClient::put_object()
的调用者还将收到有关给定对象在 tar 文件中位置的元数据。一旦将批次写入 S3,此元数据就允许通过允许您发出 S3 字节范围请求来有效地访问批次内的单个对象,而无需下载整个 tar 文件。
目标工作负载
如果您的作业具有以下属性,则此创建可能有所帮助
s3:PutObject
操作的成本是显著的,并且需要降低- 可以容忍一些额外的延迟,直到对象可用于读取(由多个写入合并引起的延迟)
- 通常不需要防止并发写入(批次序列化写入,按设计)
- 工作负载创建一个对象与下一个对象之间的时间通常小于批处理持续时间(批次将包含足够多的项目,足以支付创建批次的成本)
- 不需要能够为单个对象提供 S3 元数据(在 tar 文件中包含批处理对象的元数据的范围将非常有限)
- 不需要读者能够通过
s3:GetObject
API 访问单个对象(即读者愿意下载整个批次的对象作为 tar 文件,或者发出字节范围请求以检索单个对象)
依赖关系
~24–38MB
~681K SLoC