Golang AWS S3 批处理对象创建
Golang AWS S3 batch object creation
我正在尝试在 s3 存储桶中创建一堆 "folders"。试图复制与
https://github.com/aws/aws-sdk-go/blob/master/service/s3/s3manager/batch_test.go#L742 但这个东西需要一个 "Body" ,这在我的情况下并不是真正需要的。
到目前为止,以下代码可以满足我的需要,但我觉得有更好的 "batched" 方法可以实现。
serv := s3.New(session.New(s3h.Config))
for _, i1 := range []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f"} {
for _, i2 := range []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f"} {
req := &s3.PutObjectInput{
Bucket: aws.String(S3_BUCKET),
Key: aws.String(i1 + i2 + "/"),
}
serv.PutObject(req)
}
}
有什么指点吗?
谢谢!
S3中没有"folders"这样的东西。在简单的高层,S3 是一个很大的 key/value 商店。列表操作支持查找以特定前缀开头并可以在已知分隔符(例如 /
)处停止的键子集,使其看起来像是具有类似文件系统的语义。
只是将一个对象放入 /a/b/c/d
,看起来它已经创建了文件夹 a
、b
和 c
,但它只是使用该键创建了一个对象。控制台中使用的列表操作停止在 /
作为分隔符,因此它提供了一个像视图这样的文件夹。
您不能在单个操作中放置多个 S3 对象。每个都必须作为单独的操作上传。使用 Go,我建议您可以有一个频道,您可以放置所有需要的上传,并让多个并发工作人员处理这些以提高性能。您需要进行一些调整才能找到最佳数量。如果还没有一个库,我不会感到惊讶,因为这将是一个很常见的 S3 用例。
我正在尝试在 s3 存储桶中创建一堆 "folders"。试图复制与 https://github.com/aws/aws-sdk-go/blob/master/service/s3/s3manager/batch_test.go#L742 但这个东西需要一个 "Body" ,这在我的情况下并不是真正需要的。 到目前为止,以下代码可以满足我的需要,但我觉得有更好的 "batched" 方法可以实现。
serv := s3.New(session.New(s3h.Config))
for _, i1 := range []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f"} {
for _, i2 := range []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f"} {
req := &s3.PutObjectInput{
Bucket: aws.String(S3_BUCKET),
Key: aws.String(i1 + i2 + "/"),
}
serv.PutObject(req)
}
}
有什么指点吗?
谢谢!
S3中没有"folders"这样的东西。在简单的高层,S3 是一个很大的 key/value 商店。列表操作支持查找以特定前缀开头并可以在已知分隔符(例如 /
)处停止的键子集,使其看起来像是具有类似文件系统的语义。
只是将一个对象放入 /a/b/c/d
,看起来它已经创建了文件夹 a
、b
和 c
,但它只是使用该键创建了一个对象。控制台中使用的列表操作停止在 /
作为分隔符,因此它提供了一个像视图这样的文件夹。
您不能在单个操作中放置多个 S3 对象。每个都必须作为单独的操作上传。使用 Go,我建议您可以有一个频道,您可以放置所有需要的上传,并让多个并发工作人员处理这些以提高性能。您需要进行一些调整才能找到最佳数量。如果还没有一个库,我不会感到惊讶,因为这将是一个很常见的 S3 用例。