您可以通过基于最后一次访问时间(Last Access Time)策略的生命周期规则来自动监测数据的访问模式并识别冷数据,然后将识别出来的冷数据进行存储类型的转换,从而达到数据的冷热分层存储,最终降低存储成本。
使用场景
- 多媒体场景
某网站的视频、图片存储在OSS上,历史数据会逐渐从热转冷。因此,您可能需要将网站内长时间不被访问的数据保存为低频访问类型。此外,部分数据距离上传时间已久,但仍然是热门访问数据,这部分数据需要继续保存为标准存储类型。在该场景下应选用基于最后一次访问时间的生命周期规则,用于自动识别冷热数据并进行分层存储,从而降低存储成本。
- 相册或网盘场景
对于长时间没有访问的冷数据,希望设置自定义转储天数,自动将冷数据转为低频访问类型,并确保数据的实时访问。
- 生命科学场景
基因测序生成的大量业务数据,往往需要根据数据的最后访问时间而非最后修改时间来判断数据的冷热。按以往,客户只能手动通过日志分析或其他方式进行数据冷热的分层管理。但如果选用基于最后一次访问时间的生命周期规则,则可实现由服务端根据最后访问时间来自动识别冷热数据并实现数据分层存储。不仅如此,您还可以在同一条生命周期规则中同时结合最后访问时间与最后修改时间的策略,从而更灵活地进行数据管理。
使用限制
- 匹配条件
生命周期规则目前仅支持根据前缀和标签进行匹配,不支持通配符匹配、后缀匹配以及正则匹配。
- 碎片过期限制
不支持对重叠前缀的Object设置两条或两条以上包含碎片过期策略的生命周期规则。示例如下:
- 示例一
您对整个Bucket设置了一条包含碎片过期策略的生命周期规则,则不支持对Bucket中任意前缀的Object再设置一条包含碎片过期策略的生命周期规则。
- 示例二
您对某个Bucket中前缀为dir1设置了一条包含碎片过期策略的生命周期规则,则不支持对该Bucket中包含重叠前缀(例如dir1/dir2)的Object再设置一条包含碎片过期策略的生命周期规则。
- 示例一
- 执行的Object存储类型转换和碎片过期操作次数限制
- 对于未配置标签的生命周期规则,执行10亿或以下次生命周期相关操作(包括Object存储类型转换以及碎片过期),可在24小时内完成。如果生命周期相关操作超出10亿次,则可能超出24小时。
- 对于已配置标签的生命周期规则,执行5亿或以下次生命周期相关操作(包括Object存储类型转换以及碎片过期),可在24小时内完成。如果生命周期相关操作超出5亿次,则可能超出24小时。
注意事项
规则数量
通过控制台最多可配置100条生命周期规则,单条生命周期规则中可同时包含最后一次修改时间以及最后一次访问时间的策略。如果您需要配置更多数量的生命周期规则,请使用SDK或者命令行工具ossutil。
在开通了OSS-HDFS服务的Bucket中配置生命周期规则
如果您对开通了OSS-HDFS服务的Bucket设置或更新为匹配整个Bucket的生命周期规则,需通过NOT元素排除.dlsdata/
,避免因生命周期规则触发的Object删除或存储类型转换行为影响OSS-HDFS数据读写。

最后一次访问时间更新策略
在生命周期页面打开启用访问追踪开关后,OSS默认以访问跟踪开启时间作为Bucket中所有Object的最后一次访问时间,后续会根据Object的访问情况自动更新Object的最后一次访问时间。如果24小时内,同一个Object有多次GetObject请求,则OSS会将首次GetObject的请求时间记录为Object最后一次访问时间。
此外,访问目标Object对应的软链接时不会更新目标Object的最后一次访问时间。
转储的Object类型
- 基于最后一次访问时间的生命周期规则支持将Object从标准存储类型转为低频访问类型,您还可以选择当Object被访问后是否自动转回标准存储类型。
- 基于最后一次访问时间的生命周期规则支持将Object从标准存储或低频访问类型转为归档或冷归档存储类型,也可以选择将Object从归档转为冷归档存储类型。如果您需要将Object从标准存储或低频访问类型转换为归档或冷归档存储类型,请提交工单申请转换为归档或冷归档类型的权限,申请通过后您需要指定转换的目标存储类型。
重要 工单申请通过后,如果您基于最后一次访问时间策略将Object从标准存储或低频访问类型转为归档或冷归档类型,则Bucket中归档或冷归档类型Object的最后一次访问时间默认为该Bucket开启访问追踪的时间。
费用说明
- Object监控管理费用
开启访问追踪后会产生Object监控管理费,但OSS暂不收取该费用。
- 存储费用
您可以针对任意大小的Object设置基于最后一次访问时间的生命周期规则,OSS会根据Object所处的存储类型收取不同的存储费用。
- 标准存储类型Object,按实际存储大小计算。
- 低频访问、归档以及冷归档类型Object小于64 KB时,按照64 KB计算。当大于或等于64 KB时,按照实际存储大小计算。
- 低频访问不足规定时长容量费用
低频访问类型Object有最低30天的存储时长要求。如果存储时长未达到最低天数要求,还会产生不足规定时长容量费用。该计费项结合生命周期规则的示例说明如下:
示例一:标准类型Object在其创建10天后,通过生命周期将其转换为低频访问类型,过了5天后又将其转回标准存储。此时会产生15天的低频访问不足规定时长容量费用。
示例二:标准类型Object在其创建10天后,通过生命周期将其转换为低频访问类型,过了15天后将其删除。此时会产生5天的低频访问不足规定时长容量费用。
通过CopyObject将Object覆写为低频访问类型时,Object也有最小存储天数限制。例如标准存储类型文件在其创建10天后,通过CopyObject覆写操作将存储类型转换为低频存储,再过10天后将其删除。此时会产生20天的低频访问存储不足规定时长费用。
- 低频访问数据取回费用
访问低频访问类型文件产生的费用,按数据取回量计费。
使用OSS控制台
使用阿里云SDK
仅Go SDK支持基于最后一次访问时间创建生命周期规则。创建基于最后一次访问时间的生命周期规则前,您需要为指定Bucket开启访问追踪功能。关于基于最后一次访问时间的生命周期规则的代码示例,请参见SDK简介。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucketName := "examplebucket"
isTrue := true
isFalse := false
// 指定生命周期规则1。规则中指定前缀为logs,且小于等于64 KB的所有文件在距离最后一次访问时间30天后转为低频访问类型。且再次访问前缀为logs的文件时,这些文件仍保留为低频访问类型。
rule1 := oss.LifecycleRule{
ID: "rule1",
Prefix: "logs",
Status: "Enabled",
Transitions: []oss.LifecycleTransition{
{
Days: 30,
StorageClass: oss.StorageIA,
IsAccessTime: &isTrue,
ReturnToStdWhenVisit: &isFalse,
AllowSmallFile: &isTrue,
},
},
}
// 指定生命周期规则2。规则中指定前缀为dir,且大于64 KB的所有历史版本文件在距离最后一次访问时间10天后转为低频访问类型。且再次访问前缀为dir的文件时,这些文件将转为标准存储。
rule2 := oss.LifecycleRule{
ID: "rule2",
Prefix: "dir",
Status: "Enabled",
NonVersionTransitions:[]oss.LifecycleVersionTransition {
{
NoncurrentDays: 10,
StorageClass: oss.StorageIA,
IsAccessTime: &isTrue,
ReturnToStdWhenVisit: &isTrue,
AllowSmallFile: &isFalse,
},
},
}
// 设置生命周期规则。
var rules = []oss.LifecycleRule{rule1,rule2}
err = client.SetBucketLifecycle(bucketName, rules)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("%s\n", "set bucket life cycle success")
}
使用REST API
如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见PutBucketLifecycle。
常见问题
如果针对Bucket内相同前缀的Object创建了两条生命周期规则,其中一条规则基于最后一次修改时间,另外一条规则基于最后一次访问时间,最终执行效果会怎么样?
例如,针对目标存储空间examplebucket创建了两条生命周期规则,规则一指定该Bucket内所有前缀为doc的Object在距离最后一次修改时间30天后删除,规则二指定该Bucket内所有前缀为doc的Object在距离最后一次访问时间30天后转低频访问类型。
由于OSS执行生命周期规则时遵循以用户较低开销为原则,因此仅规则一生效。原因是规则一中指定30天后直接删除与前缀匹配的Object,此后将不再产生费用。而规则二转为低频访问类型仍会收取相关存储费用或者数据取回费用等。
已配置的生命周期规则变更后何时生效,原有规则命中的数据如何处理?
例如,您已经针对前缀为er
的Object配置了距离最后一次访问时间30天后转低频、又过了30天后当Object被访问时选择将其转为标准存储类型的生命周期规则。但是在距离最后一次访问时间的35天后,您将生命周期指定的前缀er
变更为re
,此时原有Object仅转存为低频访问类型,转存为标准存储类型的行为不生效。变更规则命中Object的最后一次访问时间也是从Bucket开启访问追踪时开始统计。
在已开启版本控制的Bucket内开启智能分层,Bucket内不同版本的Object存储层级如何分布?
在已开启版本控制Bucket内的每一个Object都有唯一的版本ID,且不同版本ID的Object相互独立。因此可能会出现历史版本Object为低频访问类型,但是最新版本Object为标准存储类型的情况。
是否支持关闭访问追踪?
支持,前提是当前Bucket不存在基于最后一次访问时间的生命周期规则。关闭访问追踪后,系统将停止追踪Object的最后一次访问时间信息。待下一次开启访问追踪后,将重新刷新所有Object的最后一次访问时间。