经典场景与架构实战

共 18 题
📑 题目列表 18 题
#
★★★

1. 单表数据量到多大需要考虑分表?"2000 万行"经验值的由来(B+ 树层高与页大小推导)及其局限?

单表数据量到多大需要考虑分表?"2000 万行"这个经验值是怎么来的?它有什么局限?

  • B+ 树层高与页大小的推导
  • "2000 万行"经验值的来源
  • 经验值的局限性与适用场景

是否需要分表,本质取决于索引 B+ 树的高度、热数据能否常驻内存以及查询的磁盘 I/O 次数。以 MySQL InnoDB 为例,默认页大小 16KB,主键为 BIGINT(8 字节)时,非叶子节点每个键约占用 8+6=14 字节,一个 16KB 页可容纳约 161024/14≈1170 个键;若每条记录约 1KB,叶子页可容纳约 16 条记录。于是 2 层 B+ 树可容纳约 117016≈1.9 万行,3 层可容纳约 1170117016≈2190 万行,即约 2000 万行。3 层 B+ 树查一条记录只需 3 次磁盘 I/O,性能良好;一旦超过约 2000 万行,B+ 树可能升为 4 层,每次查询多一次磁盘 I/O,同时索引更大、更难以全部缓存在 Buffer Pool,热数据命中率下降,性能明显劣化。这就是"2000 万行"经验值的由来。

该经验值建立在一系列假设(16KB 页、行约 1KB、主键 8 字节)之上,是 B+ 树/主键索引的粗略推导,不能机械套用。若行很小(如日志型 200 字节),3 层可容纳上亿行;若有大量二级索引、内存不足或写入频繁,即使不足 2000 万行也可能需要分表。判断是否分表应综合"索引层高、Buffer Pool 命中率、查询延迟、写入吞吐、可用内存"以及"是否需要冷热分离/归档",而非单纯看行数。

-- 查看当前表数据量与大小帮助评估
SELECT table_name, table_rows, data_length/1024/1024 AS data_mb
FROM information_schema.tables WHERE table_schema='mydb';
#
★★★

2. 亿级数据深分页(OFFSET 大值)的性能问题与优化方案(游标/子查询/延迟关联)如何选型?

亿级数据深分页(OFFSET 取大值)为什么慢?游标、子查询、延迟关联等优化方案如何选型?

  • OFFSET 深分页的性能瓶颈
  • 游标分页、延迟关联、子查询的优化原理
  • 不同方案的选型依据

OFFSET 深分页的代价随偏移量线性增长:LIMIT 1000000, 20 需要扫描并丢弃前 100 万行,再取 20 行,即使有索引,仍需从头扫描并跳过大量行,耗时随页数增大而劣化。常用优化方案:一是游标分页(基于排序键的 WHERE 条件定位,如 WHERE id > last_id ORDER BY id LIMIT 20),每页只从索引定位点扫描,复杂度稳定;二是延迟关联(deferred join),先借助索引只取主键,再回表取完整行,减少大偏移量下的回表;三是子查询/页内定位,先在内层取到起点主键再关联。游标分页适合"顺序翻页"场景,延迟关联适合"必须支持任意跳页"的场景。

选型看业务是否接受"只能顺序翻页"。若用户可接受 next/prev 且排序键稳定唯一,优先用游标分页(性能最优、天然稳定);若必须支持跳到任意页(如后台表格、搜索引擎式展示),则用延迟关联 + 索引,让 IO 集中在取主键上。无论哪种,都要求排序键有唯一索引,避免重复/跳行,并避免在深分页 + 复杂排序上直接 OFFSET。

-- 游标分页:基于排序键定位,避免深偏移
SELECT * FROM orders WHERE id > 1000000 ORDER BY id LIMIT 20;
-- 延迟关联:先取主键再回表
SELECT o.* FROM orders o
JOIN (SELECT id FROM orders ORDER BY id LIMIT 1000000, 20) t ON o.id = t.id;
#
★★★

3. 秒杀场景的端到端设计,前置限流、Redis 预扣、MQ 异步落库与最终对账

秒杀场景的端到端设计是怎样的?前置限流、Redis 预扣、MQ 异步落库与最终对账如何协同?

  • 秒杀的全链路架构
  • Redis 预扣与库存扣减
  • MQ 异步削峰与最终对账

秒杀的核心是"高并发瞬时流量 + 稀缺库存 + 强一致扣减",端到端设计通常分四层:前置限流(网关/RateLimiter 限制并发请求,或通过 Redis 预扣在入口拦截超量请求),预扣库存(用 Redis 的 Lua 脚本原子扣减库存,只有扣减成功才进入后续流程,避免数据库被挤爆),MQ 异步落库(把成功的订单请求放入消息队列,由消费者异步批量写入数据库,削峰填谷),最终对账(异步任务核对 Redis 预扣数、MQ 消费数与数据库库存,发现不一致则回滚/补偿)。整套设计把"高并发判断库存"放在 Redis,"落库"放在数据库,通过异步化把瞬时流量摊平。

关键是把"库存判断"与"数据落库"解耦:Redis 负责扛并发、快速决策,数据库负责持久化与最终一致。要保证 Redis 扣减与 MQ 发布的一致性(事务消息/发件箱),并保证幂等(每个用户只成功一次)。最终对账兜底,防止 Redis 扣减成功但落库失败导致的超卖。限流优先级最高,防止系统被瞬间打挂。

-- 秒杀落库(消费者侧):扣减库存并校验,防止超卖
UPDATE stock SET quantity = quantity - 1 WHERE sku_id = ? AND quantity > 0;
-- 若影响行数为 1 则成功,否则库存不足
#
★★

4. 亿级大表的在线归档方案设计,分区裁剪、影子表迁移、双写切换如何选择?

亿级大表的在线归档方案如何设计?分区裁剪、影子表迁移、双写切换各适用什么场景?

  • 在线归档的目标与约束
  • 分区裁剪、影子表迁移、双写切换的思路
  • 方案选型

亿级大表归档的核心是"在不停机、不影响业务的前提下,把冷数据从主表迁出以精简热表"。三种主流思路:分区裁剪(按时间/业务键设计分区表,RANGE 分区定期 DROP/DETACH 掉历史分区,冷数据自然退出,收益最大且改动小);影子表迁移(新建影子表,用回填工具分批拷贝冷数据,rename 切换,适合无分区或分区不够的旧表);双写切换(应用层同时写新旧表,逐步放开读,最后切新表,适合需要改表结构/重建的表)。分区裁剪通常是最省事的归档手段,影子表与双写适合需要"重建表结构"的情况。

选型看"是否改变表结构"。仅需按时间丢弃冷数据,首选分区裁剪(低成本、可在线、易回滚);需要重建结构/改键,用影子表渐进迁移;需要彻底切换并长时间双写验证,用双写切换。归档常配合"冷数据转冷存储/归档库"与"保留策略、合规"使用,且要保证切换期间数据一致与可回滚。

#
★★

5. 订单表的冷热分离设计,路由层、汇总查询与历史查询体验如何兼顾?

订单表的冷热分离设计如何做?路由层、汇总查询与历史查询体验如何兼顾?

  • 冷热分离的存储与路由
  • 汇总查询与历史查询的体验
  • 跨分区查询的一致性

订单冷热分离通常把"近期高频访问的热订单"留在高性能库/表,把"历史冷订单"迁到归档库/冷存储。路由层负责按订单时间/用户维度把请求分发到热库或冷库:热查询走热库,历史查询走冷库。为兼顾汇总查询(如统计、报表)与历史查询体验,会把冷库按时间分区、建立合适索引,甚至做汇总表/预聚合,避免每次全量扫描;对跨冷热的分页查询,可在路由层合并结果或提供"按时间分页"的查询入口。冷库可选择成本更低的存储(归档库、OSS 等),以降低存储成本。

冷热分离的核心是"按访问频率分流 + 分层存储"。路由层是入口,决定查询落到哪个库;冷库要建索引、做分区、必要时预聚合,保证历史查询体验;跨冷热查询要设计统一入口与合并策略。体验上要让用户无感:热查询毫秒级,历史查询可接受秒级,并明确提示历史范围。冷热之间要有迁移/对账机制保证数据完整。

#
★★

6. 订单号/流水号生成如何兼顾趋势递增、全局唯一与高并发,号段模式与 Snowflake 如何取舍?

订单号/流水号生成如何兼顾趋势递增、全局唯一与高并发?号段模式与 Snowflake 如何取舍?

  • 趋势递增、全局唯一、高并发的要求
  • 号段模式(segment)的实现
  • Snowflake 的实现与取舍

订单号需要"趋势递增(利于索引、便于排序)、全局唯一(避免主键冲突)、高并发(支撑海量生成)"。号段模式(segment)由中心发号器每次分配一段连续号段(如 1000 个),业务内本地自增,用完再申请,一次数据库往返服务上千个请求,天然趋势递增且全局唯一,但中心是单点、依赖数据库。Snowflake 由 64 位编号组成:时间戳(41 位)+ 机器 ID(10 位)+ 序列号(12 位),各节点本地生成、无中心依赖、趋势递增、高并发,但依赖时钟同步,时钟回拨可能产生重复 ID。号段模式适合"需要连续、可读、可排序"的流水号;Snowflake 适合"高并发、分布式、无中心"的 ID 生成。

取舍看业务对"连续/可读"与"无中心/高并发"的偏好。号段模式连续性强、可读性好、利于按范围内续,但依赖中心发号与数据库;Snowflake 无中心、并发高、趋势递增,但位数不可读、依赖时钟,需处理时钟回拨。两者都满足"趋势递增 + 全局唯一 + 高并发",选型是在"中心化可控"与"去中心化健壮"之间权衡。

#
★★

7. 读写分离下的"主从延迟导致读旧数据"场景,强制主库读、延迟容忍、双写一致如何权衡?

读写分离下主从延迟导致读到旧数据如何处理?强制主库读、延迟容忍、双写一致如何权衡?

  • 主从延迟与读一致性问题
  • 强制主库读、延迟容忍的策略
  • 权衡与取舍

读写分离把读请求分担到从库,但主从复制有延迟,可能读到旧数据。三类处理策略:强制主库读(对强一致场景,如"刚写入后立刻读自己的数据"、余额/库存即读,把读路由到主库,保证读后写一致);延迟容忍(对可容忍短暂旧读的场景,如报表、列表,接受从库滞后,用延迟阈值监控);双写一致(写入时同时更新缓存/同步到从库,或二次校验,牺牲部分性能换取更强一致)。实践中通常按"一致性要求"分级:核心强一致读走主库,弱一致读走从库,并监控延迟、配置合理阈值。

权衡的核心是"一致性 vs 性能/可用性"。强制主库读最稳但降低从库利用率、增加主库压力;延迟容忍性能最好但存在旧读风险;双写一致复杂且成本高。成熟做法是"路由分类 + 延迟监控 + 兜底":明确哪些读必须强一致走主库,其余走从库,并设置主从延迟告警,超阈值时自动降级全部走主库,避免读到严重过期数据。

#
★★

8. 高并发读多写少的缓存架构,缓存层级、淘汰与一致性?

高并发读多写少的缓存架构如何设计?缓存层级、淘汰策略与一致性如何保证?

  • 缓存层级与读多写少场景
  • 缓存淘汰策略(LRU/LFU)
  • 缓存一致性(Cache-Aside、更新顺序)

读多写少场景用缓存显著降低数据库压力。缓存架构常分多层:本地缓存(进程内,最快但各节点不一致)→ 分布式缓存(Redis,跨节点共享)→ 数据库。读路径先查本地缓存,未命中查 Redis,再未命中查数据库并回填缓存;写路径用 Cache-Aside 模式,先更新数据库,再删除缓存(或更新缓存)以保持一致性。淘汰策略用 LRU/LFU 等适合"热点数据"的算法,并为不同 key 设置 TTL 防止过期数据长期驻留。高并发下要防缓存穿透(查不存在的数据)、击穿(热点 key 过期)、雪崩(大量 key 同时过期),可加空值缓存、互斥锁/逻辑过期、随机过期时间。

读多写少架构的核心是"多级缓存 + Cache-Aside + 防击穿雪崩"。一致性上用"先更新数据库再删缓存",配合短 TTL 兜底;为应对高并发,用逻辑过期/互斥重建避免热点 key 击穿,用随机 TTL 避免雪崩,用空值缓存防穿透。缓存层级间本地缓存要控制一致性风险,通常只缓存低频变化数据。

#
★★

9. 订单系统的数据库设计,读写分离、分库分表与缓存的一致性?

订单系统的数据库设计如何做?读写分离、分库分表与缓存的一致性如何保证?

  • 订单系统的库表设计与拆分
  • 读写分离与分库分表
  • 缓存/多副本的一致性

订单系统数据库设计需兼顾"高并发写、频繁按用户/订单查询、跨时间统计"。结构上通常按用户维度分库分表(user_id 哈希或按时间+用户),保证同一用户订单落在同一分片便于查询与事务;读写分离用于扩展读,订单热数据可加缓存。一致性上:分库分表后要处理跨分片事务(分布式事务/最终一致)、全局唯一订单号(Snowflake/号段)、跨分片分页与统计(汇总/API 聚合);读写分离下强一致读走主库,缓存用 Cache-Aside,关键写操作(库存、状态机)落到主库并保证幂等。

订单系统设计核心是"拆分维度 + 一致性保障"。分片选用户维度便于单用户事务与查询;排序/统计类查询设计跨分片聚合方案。一致性靠"写主库 + 读从库/缓存分级 + 幂等 + 分布式事务兜底"。技巧是:把"高频热点"(库存、最新订单)与"低频历史"(历史订单、归档)分层存储,避免大表拖垮热路径。

#
★★

10. 秒杀系统的库存扣减,数据库行锁 vs Redis 预扣减的取舍?

秒杀系统的库存扣减用数据库行锁还是 Redis 预扣减?如何取舍?

  • 数据库行锁扣减的机制与代价
  • Redis 预扣减的机制与优势
  • 取舍与一致性

数据库行锁扣减:UPDATE stock SET quantity=quantity-1 WHERE sku=? AND quantity>0,依赖行锁保证原子性,扣减与落库同一事务,强一致、无超卖;但高并发下所有请求争抢同一行锁,锁竞争激烈、吞吐受限,且对数据库压力大。Redis 预扣减:用 Lua 脚本原子扣减库存,DECRBY 并判断不小于 0,吞吐极高,扛住瞬时洪峰;但库存状态在 Redis,需要与数据库最终一致,扣减成功后的订单再异步落库扣减,可能出现 Redis 扣减成功但落库失败,需对账补偿。取舍看并发量:几十上百 QPS 用数据库行锁即可;万级 QPS 秒杀必须用 Redis 预扣 + 异步落库 + 对账。

数据库行锁的瓶颈是"同一行锁串行化",Redis 把"扣减判断"从数据库移到内存,吞吐量级不同。选型核心是"并发量 + 一致性要求":并发低、要强一致,用数据库行锁;并发爆发的秒杀,用 Redis 预扣削峰,数据库只承接真正成功的订单,并用对账/幂等保证最终一致、防超卖。注意 Redis 扣减与 MQ 发布的一致性(发件箱/事务消息)。

-- 数据库行锁扣减:原子且防超卖
UPDATE stock SET quantity = quantity - 1 WHERE sku_id = ? AND quantity > 0;
#
★★

11. 亿级数据的分页查询,游标分页 vs offset 深分页的性能?

亿级数据的分页查询,游标分页与 offset 深分页的性能差异如何?各自适用场景?

  • offset 深分页的性能瓶颈
  • 游标分页的性能优势
  • 适用场景与限制

offset 深分页的性能随偏移量线性恶化:LIMIT 5000000, 20 需扫描并丢弃前 500 万行再取 20 行,即使有索引也要从索引起点遍历大量行,耗时随页数增长,且无法缓存。游标分页 WHERE id > last_id ORDER BY id LIMIT 20 从排序键定位点直接扫描 20 行,每页只做一次索引定位,复杂度 O(页大小),与总页数无关,性能稳定,适合"顺序翻页"的亿级数据。游标分页的限制是无法跳过任意页、需要唯一稳定的排序键,且只适合线性翻页。

性能差异根源是"是否从头扫描"。offset 每次都要从头扫到偏移处,代价随偏移线性增长;游标基于排序键定位,永远只扫一页。因此大数据量下"顺序翻页"应优先游标分页;若必须支持任意跳页或页码跳转,则用延迟关联(先取主键再回表)缓解,但仍是 O(offset),无法根治。排序键唯一性(如主键)是游标分页正确性的前提。

-- 游标分页:定位到上一页最后一条之后取 20 行
SELECT * FROM orders WHERE id > 1000000 ORDER BY id LIMIT 20;
-- offset 深分页:随偏移量线性恶化
SELECT * FROM orders ORDER BY id LIMIT 5000000, 20;
#
★★

12. 热点账户扣减的余额拆分/异步记账方案与对账

热点账户扣减(如大 V 红包、热门活动账户)如何做?余额拆分与异步记账方案与对账如何设计?

  • 热点账户的行锁瓶颈
  • 余额拆分(分账)方案
  • 异步记账与对账

热点账户(被大量并发扣减的单一账户)会因同一行更新的行锁竞争成为瓶颈,单行吞吐上限低。两类方案:一是余额拆分/分账(把账户拆成多个子账户/分片,每个子账户独立余额,扣减请求分散到不同分片,聚合时再汇总),吞吐随分片数扩展,但需处理"分片间余额不足判断"与"汇总一致性";二是异步记账(把扣减请求先落到队列/明细表,异步批量更新余额,配合预授权/额度校验),把"实时扣减"摊薄为"批量记账",但实时性下降,需对账保证最终一致。实际常结合:热点账户用"预授权 + 异步扣减 + 明细流水 + 定期对账"。

热点账户问题的本质是"单行热更新"。拆分把负载打散到多个分片,异步记账把瞬时流量摊平。代价是"实时一致"变"最终一致":扣减先记账/预扣,再批量更新,需靠对账把"明细账、分片余额、总余额"核对一致,防止超扣或少扣。对账是这类方案正确性的兜底。

#

13. 一个"热点账户扣款"场景从表结构、SQL 到应用层如何系统性设计?

一个"热点账户扣款"场景从表结构、SQL 到应用层如何系统性设计?

  • 表结构设计(分账、明细、余额)
  • 扣款 SQL 的原子性与防超扣
  • 应用层策略(预授权、异步、重试)

系统性设计热点账户扣款,表结构上分三张表:余额表(账户+总余额,可再拆分子账户分片)、明细账表(每次扣款的流水,含幂等键、状态)、批次/对账表(记录已过账的批次)。SQL 上扣款用原子条件更新 UPDATE balance SET amount=amount-? WHERE acct=? AND amount>=?,影响行数=1 才成功,防止超扣;对热点账户用"预授权 + 异步过账":扣款先在明细表记账(预扣),异步批量把余额扣减过账,避免每次请求都锁余额行。应用层配合幂等键防重、重试与补偿、定时对账,把明细、余额、分片核对一致。

设计要点是"把实时单行热更新转化为可扩展的记账体系"。表结构分离"余额"与"明细"便于对账;SQL 用条件更新保证原子与防超扣;应用层用幂等、预授权、异步、重试、对账把瞬时流量摊薄并保证最终一致。热点账户还可拆分子账户分片,把行锁竞争分散。

-- 余额表:原子扣减并防超扣
UPDATE balance SET amount = amount - ? WHERE acct_id = ? AND amount >= ?;
-- 明细账:幂等键防重复
INSERT INTO ledger (id, acct_id, amount, idem_key, status) VALUES (?,?,?,?, 'PENDING');
#

14. 数据库容量规划与分库分表,什么规模该拆分?

数据库容量规划与分库分表如何做?什么规模该拆分?

  • 容量规划的方法
  • 分库分表的触发规模
  • 拆分前的评估

容量规划先测量当前负载(QPS、TPS、数据量、磁盘、内存、连接数、延迟),结合业务增长预测未来一段时间(如 1-2 年)的容量需求,评估是否需要扩容或拆分。是否分库分表由多个维度决定:数据量(单表行数过大、索引层高上升、磁盘/B+ 树深度)、性能(查询延迟超标、写冲突严重)、并发(QPS/TPS 超过单机能力)、连接数(达到连接池上限)、内存(Buffer Pool 装不下热数据)。经验上"单表几千万到上亿行、QPS 数千以上、单机 CPU/IO 打满"是常见拆分信号,但需结合实测,不能只按行数。

拆分是最后手段,先做"优化"(索引、归档、冷热分离、缓存、读写分离)再谈"拆分"。容量规划要"测量→预测→决策",结合业务增长与峰值预留余量。判断拆分要综合数据量、性能、并发、连接数、内存多维度,通常先监控这些指标,设置阈值,触发后再按用户/业务维度拆分,避免过早复杂化。

#

15. 千万级用户的库表设计,主键策略、索引与归档?

千万级用户的库表设计如何做?主键策略、索引与归档如何设计?

  • 主键策略(自增 vs 雪花/UUID)
  • 索引设计
  • 归档与冷热分离

千万级用户库表设计要点:主键策略上,自增主键利于写入顺序与索引紧凑但不利于分布式/迁移与分片,Snowflake/UUID 利于分布式生成与分片但占空间、影响 B+ 树紧凑;大并发分布式场景常用"业务无状态 + Snowflake 趋势递增"或"自增主键 + 业务唯一键"双键。索引上为高频查询建二级索引(按用户、按状态、按时间),避免冗余索引,注意索引与写入的权衡,用覆盖索引减少回表。归档上把历史、冷数据(如历史订单、日志)按时间分区或归档到冷表/冷库,控制热表大小,配合保留策略与合规。

设计核心是"主键利于写入与分片、索引匹配查询、归档控制热数据"。主键选型要权衡"顺序性/紧凑性"与"分布式/可迁移性";索引按真实查询设计、宁缺毋滥;归档按时间分区 + 冷库迁移,让千万级用户数据长期稳定。凡涉及分片,主键最好包含分片维度(如 user_id)以支持分片内查询。

#

16. 数据库连接池耗尽与雪崩,快速失败与限流?

数据库连接池耗尽与雪崩如何应对?快速失败与限流如何配合?

  • 连接池耗尽的成因与危害
  • 快速失败与限流
  • 防止雪崩

连接池耗尽指请求占满所有连接且都未释放,一般由慢查询、死锁、上游超时、数据库负载过高导致,会引发连锁雪崩:新请求排队等连接、超时堆积、线程占满、实例崩溃。应对策略:快速失败(请求获取连接设置超时,超时即失败/降级,不无限等待占满线程)、限流(入口限流控制并发请求数,防止打爆连接池)、连接池参数(设置最大连接数、等待超时、空闲回收)、超时与熔断(慢查询、上游调用设置超时,熔断降级)、监控(连接数、活跃数、等待数告警)。雪崩时先止损:限流、快速失败、隔离(按业务/租户隔离连接池),恢复后再逐步放开。

连接池耗尽本质是"资源被慢请求占满不能释放"。快速失败让请求及时放弃而非无限排队,限流从源头控制并发,共同防止雪崩。核心是"超时 + 限流 + 熔断 + 监控"四位一体,并隔离业务,避免一个业务拖垮整体。恢复时逐步放量,避免瞬间再打满。

#

17. 冷热数据分离与归档,分表与归档表的方案?

冷热数据分离与归档如何做?分表与归档表的方案怎么设计?

  • 冷热数据分离的目标
  • 分表与归档表方案
  • 归档与查询体验

冷热数据分离把"高频访问的热数据"与"低频访问的冷数据"分开存储,让热表保持小、快、高命中率。方案一是分表:按时间/维度把大表拆成热表 + 历史表(如 orders_archive),通过路由层按时间查询;方案二是归档表/归档库:定期把超过保留期的冷数据 COPY 到归档表或归档库(可用分区、按月建表),然后从热表删除,可用分区 DROP 高效清理。归档后热表变小、查询变快、存储成本下降(冷数据可放廉价存储)。查询体验上,历史查询走归档表/归档库,配合索引与分区,可接受稍慢的延迟。

冷热分离的关键是"按访问频率划分 + 分层存储 + 迁移机制"。分表让热表小而不影响在线查询;归档表把冷数据迁出、用分区清理。要保证迁移可靠(分批、对账、幂等)与查询入口统一(路由按时间分发)。冷数据可降级存储,兼顾成本与合规保留。

#

18. 数据归档的生命周期管理(保留周期、存储分层、合规)

数据归档的生命周期管理如何做?保留周期、存储分层与合规如何设计?

  • 数据生命周期的阶段划分
  • 保留周期与存储分层
  • 合规要求(Tiered Storage、保留策略)

数据归档生命周期管理把数据按"价值/活跃度"划分为热、温、冷、归档等阶段,每个阶段有明确的保留周期与存储介质:热数据(在线数据库,高可用)、温数据(近线存储,稍慢)、冷数据/归档(对象存储、磁带等廉价存储,供历史查询与合规)。生命周期由策略驱动:按业务规则与合规要求设置保留周期(如订单 3 年、日志 180 天),到期自动降级(Tiered Storage)或删除(若合规允许)。合规上需满足数据保留法定义务(如金融留痕、审计要求),并保证删除符合"最小必要/数据最小化",防止过度保留带来合规风险。

生命周期管理的核心是"按策略分层 + 定时降级 + 合规保留/删除"。保留周期由业务/合规决定,存储分层让成本与访问频率匹配,合规要求"该留的留够、该删的删净"。实现上多用定时任务/分区/对象存储生命周期策略自动迁移与清理,并记录归档/删除审计日志。