V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
caqiko
V2EX  ›  程序员

mysql 千万级别的数据统计

  •  
  •   caqiko · Jun 12, 2019 via Android · 9121 views
    This topic created in 2513 days ago, the information mentioned may be changed or developed.
    我们的一个小程序在使用 MySQL 做数据存储,最大的单表 1-2 千万行,每天的增量不到 100W 行。
    现在要做统计,可能会关联很多其他的表(活动,产品页面,用户等)。

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

    有什么更好的方案吗?

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

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

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

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

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

    提供一台 8 核 16G 机器足够,都是秒查
    coder2019
        25
    coder2019  
       Sep 16, 2019
    现在我也遇到这个问题,用存储过程联表几个千万级表做数据统计,将结果存到另一张表里,统计操作大表时会直接卡死,各种调索引都没用,有人有经验分享吗
    jenlors
        26
    jenlors  
       Jan 1, 2020
    最近也遇到这样的需求,查询了一番似乎 clickhouse 是比较好的解决方案。
    shanechiu
        27
    shanechiu  
       Dec 11, 2020
    为什么没人说 elasticsearch?
    tryit
        28
    tryit  
       Jan 26, 2021
    请问下楼主现在的方案是什么呀,我们也遇到这个问题,mysql 统计查询到响应时间太长了,定时统计结果又不够灵活。。想求教下~谢谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2996 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 14:57 · PVG 22:57 · LAX 07:57 · JFK 10:57
    ♥ Do have faith in what you're doing.