低成本清理DynamoDB中90天以上陈旧遥测数据方案咨询
低成本清理大型DynamoDB表中90天以上旧遥测数据
背景信息
- 数据规模:750 GB(分布于爱尔兰、俄亥俄、北京区域)
- 条目数量:500亿条记录
- 示例数据结构:
{ "deviceid": "a00a940c-b804-4806-a14f-7c713964fc65", "timestamp": 1661521317, "notifications": false, "payload": [ { "n": "temprature", "v": "20" }, { "n": "humidity", "v": "91" } ] }
低成本清理方案
1. DynamoDB TTL自动过期(首选零成本方案)
- 核心逻辑:启用TTL功能,指定
timestamp字段作为过期判定属性,DynamoDB后台会自动删除时间戳早于90天的条目,全程无需手动编写删除逻辑。 - 成本优势:TTL自动删除操作完全免费,仅需承担数据未被删除前的正常存储费用。
- 操作步骤:
- 确认
timestamp存储的是秒级Unix时间戳(与示例格式一致)。 - 通过AWS CLI启用TTL:
aws dynamodb update-time-to-live --table-name YOUR_TABLE_NAME --time-to-live-specification Enabled=true,AttributeName=timestamp - 90天对应的秒数为
7776000(90×24×3600),DynamoDB会自动以当前时间减去该值作为过期阈值,异步清理数据(通常48小时内完成)。
- 确认
2. 批量删除+分段扫描(适合需立即清理的场景)
若TTL异步清理不符合时效要求,可采用批量删除,但需严格控制成本:
- 核心思路:用Scan(或Query,若有合适索引)分段过滤过期数据,再通过
BatchWriteItem批量删除,同时控制并发量避免读写费用飙升。 - 成本优化要点:
- 若表为预留容量模式,可临时切换为按需付费,仅为实际消耗的读写容量付费。
- 扫描时用
FilterExpression提前过滤过期数据,减少返回数据量:import boto3 from datetime import datetime, timedelta dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('YOUR_TABLE_NAME') # 计算90天前的Unix时间戳 cutoff_ts = int((datetime.now() - timedelta(days=90)).timestamp()) last_key = None while True: scan_params = { 'FilterExpression': 'timestamp < :cutoff', 'ExpressionAttributeValues': {':cutoff': cutoff_ts}, 'Limit': 100 } if last_key: scan_params['ExclusiveStartKey'] = last_key resp = table.scan(**scan_params) items = resp.get('Items', []) if items: # 批量删除,单次最多25条 delete_reqs = [{'DeleteRequest': {'Key': {'deviceid': item['deviceid'], 'timestamp': item['timestamp']}}} for item in items[:25]] table.batch_writer().batch_write_item(RequestItems={table.name: delete_reqs}) last_key = resp.get('LastEvaluatedKey') if not last_key: break - 选择业务低峰时段执行操作,避免影响正常流量,部分区域还可利用低价时段进一步压缩成本。
- 多区域表需分别在每个区域执行清理,或启用全局表同步TTL规则。
3. 导出S3后重建表(极端大规模场景最优解)
针对500亿条级别的数据,批量删除成本仍过高时,可采用此方案:
- 步骤:
- 使用DynamoDB导出功能,将未过期数据导出到S3(导出费用约0.00125 USD/GB,远低于删除费用)。
- 删除原表(或保留作为备份)。
- 创建新表并启用TTL,将S3中的数据导入新表(导入操作免费)。
- 成本优势:整体成本仅为批量删除的十分之一甚至更低,适合一次性大规模清理。
总结
- 优先选TTL自动过期:零删除成本、操作简单,适合非紧急清理需求。
- 需立即清理时用批量删除+分段扫描:通过控制扫描范围和并发量降低成本。
- 极端大规模场景选导出S3重建表:是最经济的一次性清理方案。
内容的提问来源于stack exchange,提问作者SengarAshu
相关产品推荐
相关产品推荐

