V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
caqiko
V2EX  ›  程序员

mysql 千万级别的数据统计

  •  
  •   caqiko · 2019-06-12 17:15:22 +08:00 via Android · 8351 次点击
    这是一个创建于 1973 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们的一个小程序在使用 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  
       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   ·   实用小工具   ·   5280 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:22 · PVG 17:22 · LAX 01:22 · JFK 04:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.