状态表备份到快照表

需求:
业务库存表为状态表,直接更新库存数据,有些业务需要查询历史库存,所以要对库存表数据进行备份写到另外一张tidb表中。
1.由于表数据过大,一次insert … select … 会导致事务条数超出。
2.可能会有0点之后的交易导致非实时真正0点的数据
3.运维为了节省性能,未调整快照时长

有没有什么方案或者组件能满足该需求?

2赞
  • 优化方案:
    表数据很大会导致大事务,把大事务拆散,分批插入

  • 重构方案(会影响现有的业务):
    追加版本信息,来描述库存的新旧数据,需要考虑保留多久的版本(多个版本留存会影响查询效率)

  • 运维方案:

    1. 新建一套下游库
    2. 通过CDC 保留所有的insert 和 update 操作的记录
      可以满足所有版本历史留存,但是查询和统计会变得更加复杂

以上供你参考

2赞

场景不一样。
1.我们现在就是分批插入,但是可能会导致数据不一致,不是0点实时数据,也可能是中间有事务修改数据
2.业务表不可能加版本,否则表太大了,使用起来页很麻烦,查询效率会降低很多,不能因为备份影响上有业务,这就太坑了
3.下游库有,我们要的是0点时点数据,不是实时数据。CDC 保留所有的insert 和 update 操作的记录也无法备份每天的数据。

1赞

我试了直接设置 snapshot,不支持insert,而且10分钟内备份完时间也不是很充足,为了这个备份修改 snapshot时间对白天数据同步、巡检性能影响应该是挺大的,有没有类似oracle那种直接创建并保留快照的功能?

木有~


类似这样,按照时间戳导出的,你们讨论了么?

1.这个数据能存放到oss吗?
2.数据如果10分钟写不完会发生什么?
3.好像不能直接到表,只能到文件然后再导入到表?导入的话load可以使用吗?会有大事务问题吗?

https://docs.pingcap.com/zh/tidb/stable/dumpling-overview
根据官方说明,兼容s3接口的oss存储服务应该都支持
image
默认对tidb执行snapshot级别,因为是读取的指定的版本,跟当前数据不一定有关系,我理解是不加锁的
导出到文件,然后通过 Lightning导入,可以获的比较好的体验。