业务快照

想在凌晨0-1点的时候对前一天登录过的用户(活跃用户)进行某些数据快照(把想要的数据提取出来写入到快照文件中)。请问下大家有什么建议,需要考虑数据量大,不能影响正常的业务。

是需要先找到昨天登录的用户,然后根据这些用户再去一些关联的行为日志里面取数据?

我理解如果有行为日志的话,这就是个多表关联的导出。

如果没有行为日志,要去一些只记录状态的表中查历史的状态数据来做这个快照,这个可能需要依赖mvcc的特性。会有点麻烦,要调整gc时间的。会影响查询性能。

是不是程序加日志处理方便

:thinking:这不就是日终作业么?我们一般用程序去处理。

你这想要的快照文件格式是什么?

具体什么数据,简单的可以用dumpling 备份指定时间的备份,加上where条件备份
需要gc时间调长一点

@错了大虾

使用 Flink CDC 进行实时数据同步

如果您需要更实时的数据快照,可以使用 Flink CDC 来实时同步数据到一个临时表或外部存储系统,然后在凌晨0-1点进行导出操作。

配置 Flink CDC 任务

  1. 创建 Flink CDC 任务配置文件:

yaml

source:
  type: mysql
  hostname: <tidb-hostname>
  port: <tidb-port>
  username: <tidb-username>
  password: <tidb-password>
  tables: your_database.user_activity
  server-id: <server-id-range>
  server-time-zone: UTC
  filter:
    query: "login_time >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND login_time < CURDATE()"

sink:
  type: file
  path: /path/to/snapshot/user_activity_YYYYMMDD.csv
  format: csv
  field-delimiter: ","
  line-delimiter: "\n"
2. 提交 Flink CDC 任务:
tiup cdc:dev cdc changefeed create --config /path/to/your/config.yaml
2 个赞

这明显是业务啊,你的表肯定都能通过一个字段跟用户表关联的,我能想到的就是先把前一天活跃用户抽取出来,然后把所有的相关表的关联数据,都备份出来,备份到1张或者多张表中加上日期,然后通过dumpling也好br也好,备份出来,后续需要恢复,再把备份导入回来处理

这个应该是业务范畴吧,写个程序或者脚本,脚本里加SQL把用户表和关联的操作拉出来就行吧?

感谢回答,目前打算使用stale read来做,先查所有活跃用户,然后再查用户的数据放于快照文件中。目前担心的是:1.数据量大查询操作会不会对数据库产生很大的性能压力,进而影响到其它的数据库操作 2. 活跃用户用(比较最后一次数据更新时间)怎么才能确保完全拉到前一天活跃用户,因为这个过程时间长了,数据不断更新,有可能拉取的时候前一天活跃的用户又更新了数据。有考虑过安全点,只要历史版本有我查询时间之前且安全点更新在我操作完之后再更新就可以,但是这个我似乎没法控制 :confused:(如果是mysql 是可以先进行快照,再去从库操作的)

感谢各位的回答。目前打算使用stale read来做,先查所有活跃用户,然后再查用户的数据放于快照文件中。目前担心的是:1.数据量大查询操作会不会对数据库产生很大的性能压力,进而影响到其它的数据库操作 2. 活跃用户用(比较最后一次数据更新时间)怎么才能确保完全拉到前一天活跃用户,因为这个过程时间长了,数据不断更新,有可能拉取的时候前一天活跃的用户又更新了数据。有考虑过安全点,只要历史版本有我查询时间之前且安全点更新在我操作完之后再更新就可以,但是这个安全点更新时间我似乎没法控制 :confused:(如果是mysql 是可以先进行快照,再去从库操作的)

我不知道你们是什么系统啊,我们系统是有埋点记录的,所有用户操作都记录,某天活跃的用户我们一般通过埋点可以定位到,然后通过关联用户表,将这部分用户就可以抽取出来了,其他相关联的信息,想备份都可以和抽取出来的用户关联即可。

1 个赞