十亿 mysql 数据优化,主键能否用 uid+雪花算法 id - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
petelin
V2EX    问与答

十亿 mysql 数据优化,主键能否用 uid+雪花算法 id

  •  
  •   petelin 2023-02-13 22:01:43 +08:00 1898 次点击
    这是一个创建于 1001 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景是这样的,有一个 1T 的数据库,里面有 10 亿条数据, 表结构如下

    uid status pay_method refund_status create_time amount device_id xxx

    业务上对这个库每天会插入几百完数据,qps 高峰在几百,有一些稍微复杂的查询(主要是会查用户全部的数据),索引不能覆盖全,需要回表的时候,IO 会被打的很高。

    select sum(amount) from xx where user_id = xx ,status =xx ,pay_method =xx

    (比如这个 sql ,查到 5000 行有效数据的话,需要回表因为数据太过分散,需要去 5000 个 page 上查数据,IO 就会很差,这里 buffer pool 完全存不下 1T 的数据,讨论这种冷用户的查询)

    我想的一个解决办法是,把 User_id + 雪花算法 id 当作主键,这样用户的数据都在一起,回表就不需要查 5000 个 page ,顺序 io 小几百就 ok 了。

    但是 mysql 主键一般是用自增的当作索引,避免空洞和页分裂,业务场景插入 qps 不高,这种方案是更合适的吗 ?

    第 1 条附言    2023-02-14 22:44:19 +08:00
    这已经是拆完表之后的条件了,实际数据比这大的多,场景写少读少,就是用户多,用户订单数据不均衡,有需要实时算一些用户的数据,,,
    8 条回复    2023-02-14 22:43:07 +08:00
    Azzsanjin
        1
    Azzsanjin  
       2023-02-13 22:09:54 +08:00
    只插入不更新?要不试试时许数据库
    arloor
        2
    arloor  
       2023-02-13 23:45:19 +08:00 via Android
    clickhouse
    LeeReamond
        3
    LeeReamond  
       2023-02-13 23:53:59 +08:00
    直觉感觉不合适,一般认为 uuid 在 orcale 上是很合适的主键,mysql 则优化很少。不过你们 mysql 能顶到 10 亿数据也挺厉害的。。。
    lingly02
        4
    lingly02  
       2023-02-14 00:46:03 +08:00
    不能做分区表吗
    litguy
        5
    litguy  
       2023-02-14 08:18:55 +08:00
    @lingly02 他这个不是分库分表的问题,一个用户的所有信息查询,其实 MySQL 不如列式数据库,过去在项目中,也有 10 亿记录查询,匹配某几个关键字的所有记录 fetch 需求,那时候用 Cassandra ,跑得还不错,注意主键设计就好,因为涉及到 data sharding
    superares
        6
    superares  
       2023-02-14 08:39:01 +08:00 via iPhone
    按照 uid 拆表呢?每一万用户一个表
    imokkkk
        7
    imokkkk  
       2023-02-14 09:01:19 +08:00
    MySQL MRR 貌似是解决这种问题的?
    petelin
        8
    petelin  
    OP
       2023-02-14 22:43:07 +08:00
    @litguy 我再看看 Cassandra ,其实 aws 的 dynamodb 比较合适,可以把 uid 当作分片键,create time 当作主键。uid 数据都在一起可以快速 scan ,也可以加二级索引,而且二级索引还支持带一些额外字段(但不作为索引字段)
    你这里说的主键难道就是我想的那样,user_id}_{create_time_random_id} ?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4486 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 10:00 PVG 18:00 LAX 02:00 JFK 05:00
    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