V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
TypeErrorNone
V2EX  ›  程序员

只用到最近 3 天数据的订单表如何分表呢

  •  
  •   TypeErrorNone · 2020-10-23 15:48:35 +08:00 · 2279 次点击
    这是一个创建于 1511 天前的主题,其中的信息可能已经有所发展或是发生改变。

    订单表,现在数据量很大,每天增量 10w,表用到的场景是插入,搜索三天内的数据,更新。
    也就是说三天前的数据是用不到的。

    如果按月分割,那么上个月最后三天的数据就操作不了,不然代码里要加很多逻辑处理。

    这种情况如何分表呢?

    14 条回复    2020-10-24 15:03:36 +08:00
    qiayue
        1
    qiayue  
       2020-10-23 15:59:29 +08:00
    有一张实时表,所有的实时操作都在这张表操作。
    有另一个定时任务,把超过 3 天的订单移动到月表。
    TypeErrorNone
        2
    TypeErrorNone  
    OP
       2020-10-23 16:03:10 +08:00
    @qiayue 我也考虑过这样,innodb delete 会锁表吗
    IMCA1024
        3
    IMCA1024  
       2020-10-23 16:07:45 +08:00
    TypeErrorNone
        4
    TypeErrorNone  
    OP
       2020-10-23 16:12:50 +08:00
    @IMCA1024 这会导致插入订单
    Riscly
        5
    Riscly  
       2020-10-23 16:15:38 +08:00 via iPhone
    1 、实时表 /Redis 缓存,优点:开发快,缺点:增加数据库压力
    2 、上个 elasticsearch,优点:搜得快,后续可以搞搜索也能用上,缺点:开发成本高,如果有批量修改的话还是麻烦
    TypeErrorNone
        6
    TypeErrorNone  
    OP
       2020-10-23 16:22:51 +08:00
    @Riscly 不想再引入 redis 进入订单
    longchen888
        7
    longchen888  
       2020-10-23 17:09:31 +08:00
    有一张实时表,所有的实时操作都在这张表操作。
    有另一个定时任务,把超过 3 天的订单移动到月表。

    --------
    迁移数据的时候,分页(比如一页 500 条)迁移数据,迁移完后,根据 ID 批量删除,应该就不会锁表了,想快的话,就多线程迁移;缺点是慢,优点是稳
    dorothyREN
        8
    dorothyREN  
       2020-10-23 17:55:34 +08:00
    加一个三天的表不就行了
    rrfeng
        9
    rrfeng  
       2020-10-23 18:15:08 +08:00
    那你就按天建表呗,取个约数不就不存在跨表问题了。
    并且 drop 的时候也不会锁你的业务。
    MaxFang
        10
    MaxFang  
       2020-10-23 19:09:48 +08:00
    主表用于新数据插入,和最近 3 个月数据的查询。
    历史表可以按月等分表,每天脚本处理,从主表中筛选出超过 3 个月的订单数据,插入历史归中。
    如果每天都操作,每天的处理量也就一天的数据,按每天 10W 的数据来看,插入历史表和从主表删除,即使根据单个 id 来处理也完全够用。如果要加快速度,简单的方法,分页批量操作,或者按 ID 取模多脚本操作。
    wangritian
        11
    wangritian  
       2020-10-23 19:16:39 +08:00
    不用分表,计划任务凌晨随便搞
    wangyanrui
        12
    wangyanrui  
       2020-10-23 20:06:17 +08:00 via Android
    插个楼

    不要为了分表而分表,一天约十万的插入量完全可以扛得住

    产品的需求时时在变化
    不要提前优化
    不要提前优化
    不要提前优化

    建议:先抗住,量大了迁移到 TiDB 或者加个 ES
    kanepan19
        13
    kanepan19  
       2020-10-24 10:24:59 +08:00
    我们当前一天 200W 的量单表也没问题.

    如果一定要分表, 可以考虑按时间分表 ,按月或者按日分表
    fengpan567
        14
    fengpan567  
       2020-10-24 15:03:36 +08:00
    上 sharding jdbc,按日期分表
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1128 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 18:01 · PVG 02:01 · LAX 10:01 · JFK 13:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.