每天约 80W 数据增量的订单表,在 MySQL 数据库中怎么设计存储,才能方便查询使用近两个月的数据。 按天分区 or 按月分区?
![]() |
1
meshell 1 天前
我怎么想得是按用户分表呀,统计的事情交给统计服务去做。
|
![]() |
2
la2la 1 天前
每天 80w 每个月合计 2400w, 按月分表或者双月分表都可以。
如果需要复杂逻辑分析的话,接个 cdc 同步数据到 doris 这些 olap 数据库中 |
3
jigujigushanshan 1 天前
按两个月分
|
![]() |
4
LiaoMatt 1 天前
@jigujigushanshan 近两个月是动态的, 按两个月分肯定不行, 如果只能用 MySQL 还是单独按月分, 不过最好引入其他类型的 DB, 不然很多场景容易遇到瓶颈
|
![]() |
5
lepig 1 天前
大家按月分表一般如何操作,请教一下?
是直接停机,还是写脚本自动执行 |
6
prodcd 1 天前
分库、分表、分区,最后才是分区,可以先按用户 id 取模分库、分表。
|
![]() |
7
pxllong 1 天前
换个数据库 支持 shading 的 例如 mongodb 、tidb 、阿里云的 porladb
弄个支持分表分表的中间件 kingshard 、mycat |
![]() |
8
wangzi1993 OP @prodcd 为啥是按照用户分表啊,1L 也这么说,我这个是订单表,你们说的用户是数据库的用户吗?比如我们这 80W 的增量数据其实就只有 36 个城市,基本上是每个城市的用户用他们自己的数据,只有我们中台会用到全量数据,这种场景是不是按照城市分区好一点呢?
|
9
worldgg 1 天前
@wangzi1993 #8 好奇,如果我换了城市,是不是会看不到历史单据
|
10
guofushan2903 1 天前
用 shardingjdbc ,不要用 mysql 原生的分区表,可以按月分片
|
![]() |
11
peteretep 1 天前
经典方案:google 关键字 “mysql 分库分表面试题”
新潮方案:tidb |
![]() |
13
qiuhang 1 天前
最朴实无华的是分表,每 2 个月分一个表,每张表 5000 万左右,做好索引的话问题不大。
|
14
Plating 1 天前
关键是选择好分片的片键字段,需要贴近业务。Java 建议选择 shardingjdbc
|
15
tanoak 1 天前
提供一个我们的思路,基于 id hash 分区,统计走 binlog 同步数据到 es 或者是大数据那套 hive
|
16
prodcd 20 小时 0 分钟前
@wangzi1993 因为大多查询是从用户角度去查的,这样分区可以让查询只打开一个分区文件。你说的按城市分区,城市也是用户的一个属性,也是将用户的订单分散到不同库、表、区。但不同城市的订单量可能差距很大,铁岭和上海肯定订单量不同。一般使用 user.id 取模,或者 username 哈希,这样不同库、表、区的订单量会比较平均。
如果你还要兼顾按时间统计订单信息,那么可以考虑先按月份分区,然后再使用 user.id 进行子分区。 |
![]() |
17
mikawang 6 小时 47 分钟前
如果用 pg 的话,可以试试 timescaledb ,分区、压缩等等等自动帮你做了
|
![]() |
18
hugqq 5 小时 1 分钟前
首先这日增 80w 的数据量 mysql 的支持就不友好,硬要用 mysql 做分区,直接用月做分区不就得了,分区的操作是不推荐的还不如分表。其实最好就是氪金上数仓解君愁。
|