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

mysql 千万级别的数据统计

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

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

    有什么更好的方案吗?

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

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

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

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

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

    提供一台 8 核 16G 机器足够,都是秒查
        25
    coder2019   89 天前
    现在我也遇到这个问题,用存储过程联表几个千万级表做数据统计,将结果存到另一张表里,统计操作大表时会直接卡死,各种调索引都没用,有人有经验分享吗
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   880 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 20ms · UTC 22:10 · PVG 06:10 · LAX 14:10 · JFK 17:10
    ♥ Do have faith in what you're doing.