如何分层

按照在线-离线、对时延的要求,可以把数据存储分为:

L0:T+0
L1:T+0
L2:T+1

其中 L1 是 L0 的穿透防御层,但延时会稍微更高。L0 是 10ms 查询层,不是全量数据。L1 是 100ms 查询层,是全量数据,L0 和 L1 都支持轻度分析操作。

L2 是全量数据,可以支持复杂大型查询。

设计 L 的分层要考虑数据的:

  • 是否全量:数据量大小,这要求我们关注我们技术选型的 scale 能力,特别是数据线性增长以后,性能是否线性增长。
  • 是否全维度:这要求我们关注我们技术选型的 schema 建模能力。
  • 延时要求:这要求我们关注我们技术选型的查询执行模型。
  • 查询复杂程度要求:这需要关注我们的技术选型支持的查询语言。

如何迁移数据

数据迁移问题 = 制造新从库问题 + 读写切换的问题

  1. 寻找一个时间点,使用备份进行冷启动,然后通过类似 binlog 制造新从库的机制进行追踪(对于 update 和 delete,都可以设置简单的幂等机制,insert 的幂等要防异常)。
  2. 框架进行数据校验:主键范围查询,md5 查询。因为数据迁移总是非事务性的最终一致性方案,只能通过校验来确保最终一致性。
  3. 业务层自行根据 binlog 事件进行消息驱动的校验。

可以参考《MySQL 与数据迁移》