V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
v21an

关于一个优化问题

  •  
  •   v21an · Aug 19, 2023 · 1443 views
    This topic created in 994 days ago, the information mentioned may be changed or developed.

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

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

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

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

    在这基础上,我的建议是:
    找一个单独的机器,这个机器提供 4G 左右的内存,
    写一个 python 脚本,用 select * from xxx limit a, b 的方式,将用户表和交易表全部 load 到内存。
    然后手动实现 join 和统计之类的工作,之后写结果到 csv 。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4566 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 10:06 · PVG 18:06 · LAX 03:06 · JFK 06:06
    ♥ Do have faith in what you're doing.