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

2020-10-23 15:48:35 +08:00
 TypeErrorNone

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

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

这种情况如何分表呢?

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

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

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

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

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

如果一定要分表, 可以考虑按时间分表 ,按月或者按日分表
fengpan567
2020-10-24 15:03:36 +08:00
上 sharding jdbc,按日期分表

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/717890

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX