数据库小白咨询一个 MySQL 数据表的设计问题

157 天前
 wangzi1993

每天约 80W 数据增量的订单表,在 MySQL 数据库中怎么设计存储,才能方便查询使用近两个月的数据。 按天分区 or 按月分区?

2579 次点击
所在节点    数据库
18 条回复
meshell
157 天前
我怎么想得是按用户分表呀,统计的事情交给统计服务去做。
la2la
157 天前
每天 80w 每个月合计 2400w, 按月分表或者双月分表都可以。
如果需要复杂逻辑分析的话,接个 cdc 同步数据到 doris 这些 olap 数据库中
jigujigushanshan
157 天前
按两个月分
LiaoMatt
157 天前
@jigujigushanshan 近两个月是动态的, 按两个月分肯定不行, 如果只能用 MySQL 还是单独按月分, 不过最好引入其他类型的 DB, 不然很多场景容易遇到瓶颈
lepig
157 天前
大家按月分表一般如何操作,请教一下?

是直接停机,还是写脚本自动执行
prodcd
157 天前
分库、分表、分区,最后才是分区,可以先按用户 id 取模分库、分表。
pxllong
157 天前
换个数据库 支持 shading 的 例如 mongodb 、tidb 、阿里云的 porladb
弄个支持分表分表的中间件 kingshard 、mycat
wangzi1993
157 天前
@prodcd 为啥是按照用户分表啊,1L 也这么说,我这个是订单表,你们说的用户是数据库的用户吗?比如我们这 80W 的增量数据其实就只有 36 个城市,基本上是每个城市的用户用他们自己的数据,只有我们中台会用到全量数据,这种场景是不是按照城市分区好一点呢?
worldgg
157 天前
@wangzi1993 #8 好奇,如果我换了城市,是不是会看不到历史单据
guofushan2903
157 天前
用 shardingjdbc ,不要用 mysql 原生的分区表,可以按月分片
peteretep
157 天前
经典方案:google 关键字 “mysql 分库分表面试题”
新潮方案:tidb
layxy
157 天前
@lepig 定时任务提前创建表,比如定时任务每年年中创建明年的 12 个月的分表
qiuhang
157 天前
最朴实无华的是分表,每 2 个月分一个表,每张表 5000 万左右,做好索引的话问题不大。
Plating
157 天前
关键是选择好分片的片键字段,需要贴近业务。Java 建议选择 shardingjdbc
tanoak
157 天前
提供一个我们的思路,基于 id hash 分区,统计走 binlog 同步数据到 es 或者是大数据那套 hive
prodcd
157 天前
@wangzi1993 因为大多查询是从用户角度去查的,这样分区可以让查询只打开一个分区文件。你说的按城市分区,城市也是用户的一个属性,也是将用户的订单分散到不同库、表、区。但不同城市的订单量可能差距很大,铁岭和上海肯定订单量不同。一般使用 user.id 取模,或者 username 哈希,这样不同库、表、区的订单量会比较平均。
如果你还要兼顾按时间统计订单信息,那么可以考虑先按月份分区,然后再使用 user.id 进行子分区。
mikawang
156 天前
如果用 pg 的话,可以试试 timescaledb ,分区、压缩等等等自动帮你做了
hugqq
156 天前
首先这日增 80w 的数据量 mysql 的支持就不友好,硬要用 mysql 做分区,直接用月做分区不就得了,分区的操作是不推荐的还不如分表。其实最好就是氪金上数仓解君愁。

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

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

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

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

© 2021 V2EX