目前有一张交易表 100w 数据 和用户提成表( 100w+数据),和用户表( 3 千条数据), 目前需求是每个用户生成当月报表 csv , 交易表和分润表已经按月分表。
我的处理逻辑就是 ,查询出 3k 条用户,然后循环进行查询交易表和提成表数据生成 csv 上传 oss 然后保存数据到一张新的报表记录表中,
这样就有个问题 ,io 太大了。 循环 3k 条用户数据 每查询一个用户都要 查询交易表和用户提成表, 有没有什么优化思路。除了 mysql 数据库索引之外
1
vcbal 2023-08-19 12:27:21 +08:00
换个思路,比如把这些需要联表 分组查询的 直接以一条记录的形式存在一个新的报表表中,这样子是不是会好点儿?
|
2
lindt99cocoa 2023-08-19 14:18:22 +08:00
物化视图
|
3
yinmin 2023-08-19 16:50:35 +08:00
可以 1 次 select 直接出来结果的。指条明路,你自己研究一下:JSON_ARRAYAGG(JSON_OBJECT(...))
|
4
zdking08135 2023-08-23 00:10:17 +08:00
加几个限定:
1. 生成报表只需要离线。 2. 用户表基本固定 3k+,交易和提成按月分表,每个月的数据量 100w+ 在这基础上,我的建议是: 找一个单独的机器,这个机器提供 4G 左右的内存, 写一个 python 脚本,用 select * from xxx limit a, b 的方式,将用户表和交易表全部 load 到内存。 然后手动实现 join 和统计之类的工作,之后写结果到 csv 。 |