关于 mysql 分表存储的问题

2020-07-25 10:30:35 +08:00
 baoruizhe

请教大家一下一个关于 mysql 存储的问题: 项目背景:springboot + mybatis plus + mysql(单机) +redis, 现在有一个业务的表数据持续增长,目前统计该表已经有 3000W 左右的数据了(这些数据可能客户都会用到,所以不能删除以前的),每天有 50 到 100w 左右,预计未来会更多,可能很快就会达到瓶颈,如果想到优化,大家可能第一时间想到的是分库分表,这个思路也没毛病,要用到分库分表就要考虑使用中间件,我目前了解到的比较合适的有 Sharding-Sphere, 我想的是主要解决容量存储问题,所以针对于这张表采用分表的方案, sys_table_1,sys_table_2...,然后按照主键策略,奇数存第一张表,偶数第二张,但是最大的问题就是采用了分库分表后通过主键查询 更新没问题,但是涉及到其他条件查询好像就力不从心了,想请教下大家在工作中有遇到解决 mysql 单表数据量过大的实际方案吗? ps:刚才写的时候想到一个分表的复杂条件查询解决方案:用 es 同步 mysql,复查查询走 es,取到主键,再去数据库查询

2425 次点击
所在节点    MySQL
7 条回复
baoruizhe
2020-07-25 10:33:13 +08:00
顶顶顶,大家可以一起讨论学习下
cheng6563
2020-07-25 11:35:17 +08:00
Sharding 可以非非主键查询
baoruizhe
2020-07-25 11:38:44 +08:00
@cheng6563 官方说的暂不支持勒
gantleman
2020-07-25 11:41:43 +08:00
查询的部分上 lucene 或 spark 。
Jooooooooo
2020-07-25 13:26:08 +08:00
分表你要解决的问题至少有

1. 分表是否真的解决问题. 会不会出现分表之后依然有大表(或者热点表, 热点行等等)的问题. 分表之后能抗多久以后的业务? 至少是一到两年不用再动才有价值.

2. 用什么维度去分表, 分表之后所有的查询最好是集中在一个表上, 跨表查询会非常麻烦. 当前维度能不能适应之后业务的发展? 会不会出现新业务分表无法支撑又得重做一遍. (用 ES 查询的方案调研清楚了吗, 能否满足要求)

3. 现在是单表, 无缝过渡到分表的方案是怎么样的? 期间风险怎么降低和规避. (比如数据一致性, 业务正确性等等)

应该还有许多, 做过的人可以再补充.
vchat
2020-07-25 16:34:03 +08:00
1. 分库和分表是解决水平扩展的问题;
2. es 是解决复杂查询的问题;
3. 历史数据量多, 需要考虑这些历史数据全部范围的数据都需要实时查询吗?
littlewing
2020-07-26 03:55:24 +08:00
分库分表是用来解决 tps 过大的问题的
你这个是数据量大,需要做冷热数据分离

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

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

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

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

© 2021 V2EX