mysql 千万级别的数据统计 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
caqiko
V2EX    程序员

mysql 千万级别的数据统计

  •  
  •   caqiko 2019-06-12 17:15:22 +08:00 via Android 8867 次点击
    这是一个创建于 2365 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们的一个小程序在使用 MySQL 做数据存储,最大的单表 1-2 千万行,每天的增量不到 100W 行。
    现在要做统计,可能会关联很多其他的表(活动,产品页面,用户等)。

    直接在 navicat 中查,关联几个表,在 distinct 一下,就要一分钟了。
    统计结果要做成 API,提供给网页端报表和 APP 端报表使用。

    有什么更好的方案吗?

    目前想到的临时方案是存储过程写结果表,定时更新。
    比如一张表记录每天的新用户数和活跃用户数,一张表记录每天的订单情况。

    这样做可以减轻数据库压力,但是不够灵活,运营方有一个需求要统计就需要写一个结果表。
    也考虑过数据分层,构建多维数据仓库,然后使用微软的 SSAS 构建 CUBE,不知道这样做还能否通过 API 取 SSAS 中的数?
    另外这种方案的成本怎么样?

    再另外,现在这种数据量,有上 Hadoop 的必要吗?(目前开发团队主要技术栈是 Node,Python,.Net )
    第 1 条附言    2019-06-12 18:02:32 +08:00
    每日增量不到 10w 行
    28 条回复    2021-01-26 11:24:28 +08:00
    snappyone
        1
    snappyone  
       2019-06-12 17:26:06 +08:00
    你这个需求暂时没必要 hadoop,mysql 从库做统计能满足暂时需求应该
    caqiko
        2
    caqiko  
    OP
       2019-06-12 17:31:43 +08:00 via Android
    @snappyone 做从库也还是要写结果表吧?直接统计原始表,同时访问的人多了,压力还是有点大
    aru
        3
    aru  
       2019-06-12 17:34:56 +08:00
    @caqiko 你说的对。用从库做统计,然后定时写结果表
    misaka19000
        4
    misaka19000  
       2019-06-12 17:37:11 +08:00
    你这个需要的是 OLAP 吧?
    roscoecheung1993
        5
    roscoecheung1993  
       2019-06-12 17:55:57 +08:00
    @caqiko 从库就很自由了...愿意写结果表就写结果表,不愿意写就随时跑 sql 呗~跑几个小时即使高负载也不影响主业务的
    caqiko
        6
    caqiko  
    OP
       2019-06-12 17:59:36 +08:00
    @roscoecheung1993 但是前端报表要能及时看到啊。。不能前端请求等几个小时才出来个图片。。
    caqiko
        7
    caqiko  
    OP
       2019-06-12 18:01:06 +08:00
    @misaka19000
    我们现在也考虑使用 olap 不知道您对产品选型有没有什么好的建议?
    endershadow
        8
    endershadow  
       2019-06-12 18:01:59 +08:00   1
    clickhouse 完事
    mind3x
        9
    mind3x  
       2019-06-12 18:08:07 +08:00   1
    Druid 了解一下
    npe
        10
    npe  
       2019-06-12 18:11:58 +08:00
    数据太大没办法做到实时,建议用定时任务,将数据提前准备好。代价是:数据延迟一天。
    myyou
        11
    myyou nbsp;
       2019-06-12 18:21:50 +08:00
    Hadoop+kylin 可以做实时查询。数据量早晚都变大,不如尽快上 Hadoop,也方便前期积累经验。
    akira
        12
    akira  
       2019-06-12 18:36:10 +08:00
    目前想到的临时方案是存储过程写结果表,定时更新。
    比如一张表记录每天的新用户数和活跃用户数,一张表记录每天的订单情况。
    ------------------
    就是这个方案 起码足够你们再抗一年半年了
    KasonPasser
        13
    KasonPasser  
       2019-06-12 19:55:32 +08:00
    我之前做了一个,就是每半小时就统计一次当天的数据。不过我这对数据的实时要求是没有那么高的,同时这样统计会是有一些数据有差异性,要能接受这差异才可以这样使用。
    snappyone
        14
    snappyone  
       2019-06-12 20:24:08 +08:00
    @caqiko 还有个方案,用 canal 拉 mysql 增量数据处理之后再合并,但是有一定限制,你可以看看适合你们不
    beidounanxizi
        15
    beidounanxizi  
       2019-06-12 20:26:51 +08:00
    elk 轻松搞定 MySQL 单表查询千万级还是能 hold 住的 好好利用索引也没问题 join 查询的话 还是预处理数据走 elk 吧
    xiaochun41
        16
    xiaochun41  
       2019-06-12 20:46:11 +08:00
    这个量级索引使用合理的话,直接使用 sql 查没什么问题。
    如果担心影响数据库上的实时业务,像上面的同学说的,可以使用从库做统计,
    也可以考虑通过采集日志的方式来做。
    DiverRD
        17
    DiverRD  
       2019-06-12 20:54:55 +08:00 via Android
    从库,索引利用好,把复杂的语句联表这些拆成简单的语句,多查几次。 千万级别还是可以应付的,没必要实时,允许数据一定承受范围内的延迟。
    fun
        18
    fun  
       2019-06-12 21:17:18 +08:00
    druid 很适合
    Vamposine
        19
    Vamposine  
       2019-06-12 21:17:52 +08:00 via iPhone
    apache kylin 项目了解一下,数据源可以对接 mysql,支持 sql 查询,秒级响应
    Vamposine
        20
    Vamposine  
       2019-06-12 21:19:54 +08:00 via iPhone
    当然如果公司有预算,可以上 Kyligence Enterprise 企业版( apache kylin 的商业版),有兴趣可以联系我
    Vamposine
        21
    Vamposine  
       2019-06-12 21:22:06 +08:00 via iPhone
    忘了提了,Kyligence Enterprise 现在无缝对接各大主流 BI 产品,那些 api 什么的根本不需要你提供。基本上就是开箱即用解决你现在所有的需求。速度非常快,当然选择 kylin 自己维护开发也可以。(顺带打得广告应该不会违反 v2 的规矩吧?)
    fireapp
        22
    fireapp  
       2019-06-13 00:04:31 +08:00 via iPhone
    binlog 实时同步写 avro,隔天 avro 转 parquet 然后单机 apache drill 或者单机 spark sql 鲁 sql 完事
    caqiko
        23
    caqiko  
    OP
       2019-06-16 18:26:56 +08:00
    @fireapp 你说的这些名词 我只听过,不知道实施起来难度会不会很大?
    fireapp
        24
    fireapp  
       2019-06-17 08:15:55 +08:00 via iPhone   1
    @caqiko 根据我的经验实施起来不麻烦,都是一些工具,找几个 demo 试试就会了

    可以去掉 avro 这个,binlog 实时写
    文本,csv/tsv 都行,隔天转 parquet, 转 parquet 能极大提高查询效率,还顺带支持压缩

    drill 比 spark sql 简单,解压,简单配置下内存,启动就行,
    通过它来 撸 sql 查询文本跟 parquet 文件

    提供一台 8 核 16G 机器足够,都是秒查
    coder2019
        25
    coder2019  
       2019-09-16 10:02:16 +08:00
    现在我也遇到这个问题,用存储过程联表几个千万级表做数据统计,将结果存到另一张表里,统计操作大表时会直接卡死,各种调索引都没用,有人有经验分享吗
    jenlors
        26
    jenlors  
       2020-01-01 01:01:25 +08:00
    最近也遇到这样的需求,查询了一番似乎 clickhouse 是比较好的解决方案。
    shanechiu
        27
    shanechiu  
       2020-12-11 23:39:05 +08:00
    为什么没人说 elasticsearch?
    tryit
        28
    tryit  
       2021-01-26 11:24:28 +08:00
    请问下楼主现在的方案是什么呀,我们也遇到这个问题,mysql 统计查询到响应时间太长了,定时统计结果又不够灵活。。想求教下~谢谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5494 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 03:21 PVG 11:21 LAX 19:21 JFK 22:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86