文档

S3协议数据压缩

更新时间:

Lindorm S3兼容协议提供了桶(Bucket)级别的压缩功能,可以在上传文件时对桶内的所有对象进行压缩。本文介绍如何使用S3兼容协议数据压缩功能。

前提条件

宽表引擎为2.4.3.2及以上版本。如何查看或升级当前版本,请参见宽表引擎版本说明升级小版本

注意事项

  • 设置压缩算法前已存在的历史对象在设置压缩算法后不会被压缩。

  • 目前仅支持zlib算法。

开启桶的数据压缩

将桶标签(Bucket Tagging)中的compression参数设置为zlib,为桶中的对象添加压缩算法即可开启桶的数据压缩功能。

重要
  • 未设置compression参数时,桶默认不开启压缩。

  • 数据压缩功能在设置压缩算法的5~10分钟后才可生效,请等待5~10分钟后再上传文件。

以桶testbucket为例,介绍不同环境下如何开启桶的数据压缩。

Java

String bucketName = "testbucket";
TagSet tagSet = new TagSet();
tagSet.setTag("compression", "zlib");
client.setBucketTaggingConfiguration(bucketName, new BucketTaggingConfiguration().withTagSets(tagSet));

Go

tagInput := &s3.PutBucketTaggingInput{
        Bucket: aws.String("testbucket"),
        Tagging: &s3.Tagging{
            TagSet: []*s3.Tag{
            {
                Key:   aws.String("compression"),
                Value: aws.String("zlib"),
            },
        },
    },
  }
  _, err := client.PutBucketTagging(tagInput)

Python

client.put_bucket_tagging(
        Bucket="testbucket",
        Tagging={
            "TagSet":[{"Key":"compression","Value":"zlib"},]
        }
)

查看桶的压缩算法

通过桶标签查看桶的压缩算法。

Java

BucketTaggingConfiguration tagConfig = client.getBucketTaggingConfiguration(bucketName);

Go

result, _ := client.GetBucketTagging(&s3.GetBucketTaggingInput{
        Bucket: aws.String("testbucket"),
})

Python

result = client.get_bucket_tagging(
Bucket='testbucket'
)

关闭桶的数据压缩

您可以通过删除桶标签的方式关闭数据压缩功能。

重要
  • 如果桶同时存在很多标签,但只想删除压缩算法对应的标签,则需要通过覆盖写入的方式将桶标签更新为压缩算法对应的标签。具体操作,请参见开启桶的数据压缩

  • 删除桶标签的5~10分钟后,数据压缩功能才会完全关闭。

Java

client.deleteBucketTaggingConfiguration("testbucket");

Go

_, err := client.DeleteBucketTagging(&s3.DeleteBucketTaggingInput{
    Bucket: aws.String("testbucket"),
})

Python

client.delete_bucket_tagging(Bucket="testbucket")

查看压缩效果

Java

S3Object object = client.getObject(containerName, blobName);
object.getObjectMetadata().getUserMetadata().get("x-lindorm-blob-compressed-length")
说明
  • x-lindorm-blob-compressed-length为特定字段,在查看压缩效果时需要添加。

  • 返回结果为压缩后的文件大小。

Go

input := &s3.HeadObjectInput{
Bucket: aws.String("testbucket"),
Key: aws.String("testblob"),
}
result, _ := client.HeadObject(input)
fmt.Println(*result)

Python

response = s3_client.head_object(
    Bucket="testbucket",
    Key="testblob"
)
print(response['Metadata']['x-lindorm-blob-compressed-length'])
说明
  • x-lindorm-blob-compressed-length为特定字段,在查看压缩效果时需要添加。

  • 返回结果为压缩后的文件大小。

  • 本页导读 (1)
文档反馈