关于一个优化问题

2023-08-19 11:09:29 +08:00
 v21an

目前有一张交易表 100w 数据 和用户提成表( 100w+数据),和用户表( 3 千条数据), 目前需求是每个用户生成当月报表 csv , 交易表和分润表已经按月分表。

我的处理逻辑就是 ,查询出 3k 条用户,然后循环进行查询交易表和提成表数据生成 csv 上传 oss 然后保存数据到一张新的报表记录表中,

这样就有个问题 ,io 太大了。 循环 3k 条用户数据 每查询一个用户都要 查询交易表和用户提成表, 有没有什么优化思路。除了 mysql 数据库索引之外

985 次点击
所在节点    Go 编程语言
4 条回复
vcbal
2023-08-19 12:27:21 +08:00
换个思路,比如把这些需要联表 分组查询的 直接以一条记录的形式存在一个新的报表表中,这样子是不是会好点儿?
lindt99cocoa
2023-08-19 14:18:22 +08:00
物化视图
yinmin
2023-08-19 16:50:35 +08:00
可以 1 次 select 直接出来结果的。指条明路,你自己研究一下:JSON_ARRAYAGG(JSON_OBJECT(...))
zdking08135
2023-08-23 00:10:17 +08:00
加几个限定:
1. 生成报表只需要离线。
2. 用户表基本固定 3k+,交易和提成按月分表,每个月的数据量 100w+

在这基础上,我的建议是:
找一个单独的机器,这个机器提供 4G 左右的内存,
写一个 python 脚本,用 select * from xxx limit a, b 的方式,将用户表和交易表全部 load 到内存。
然后手动实现 join 和统计之类的工作,之后写结果到 csv 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/966616

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX