我们有张用户信息表快 1000W 数据了,而且每天还在增长,所以决定进行分表。 但另外有很多 100W 不到的小表需要关联用户信息。我考虑了几个方案,希望大家给点建议。 1.把这些小表也按照相同维度分表,这样就不会跨库了,但是感觉小表没必要分,还会带来分页查询问题。 2.分两次,先把信息查出来,在进行一次 join 操作,可能要 join 多次。 3.上缓存,先把信息查出来再一个个走缓存,要考虑缓存一致的问题。 大家有更好的方案吗?
1
gz911122 2020-07-03 13:30:59 +08:00 1
做个 mysql 分区得了 还简单.
1000w 也不是特别多 |
2
baoruizhe 2020-07-03 14:00:44 +08:00
对呀 1000W 不多,分库分表的前提是你的 sql 优化了,索引也加了,实在没有办法了才考虑分库分表哦,我们公司单表 3000W 了都不慌
|
3
baoruizhe 2020-07-03 14:01:57 +08:00
如果要分,可以考虑使用 shardingjdbc 分库分表中间件,感觉挺不错的 使用 mysql+es 组合,复查查询的全部走 es,最后拿到主键再去查询 mysql
|
4
DreamSpace 2020-07-03 14:12:45 +08:00
拿到代码中组装如何。
先去主表里取数据,把需要`JOIN`的`ids`去重后拿到另一张表去做`IN`查询。 |
5
whahuzhihao 2020-07-03 14:17:00 +08:00
才 1000w 不用着急分表吧
|
6
yuananf 2020-07-03 14:21:04 +08:00 via Android
直接上 tidb 算了
|
7
JasonLiHai 2020-07-03 14:23:56 +08:00
1000w 松松拉,4000w 的用户表还在用
|
8
blackshadow 2020-07-03 14:26:52 +08:00
1000w,没必要吧。 优化一下查询 sql,建立合理的索引。 实在不行,升级一下硬件。
|
9
yongjing 2020-07-03 14:26:52 +08:00 via Android
7000w 也没感觉有什么瓶颈
|
10
linxb 2020-07-03 14:37:11 +08:00 1
1000w 简直小菜一碟,你太看不起 mysql 了
|
11
xuanbg 2020-07-03 15:43:16 +08:00
我们系统里面用户的热数据基本都走缓存,读写用户表是极个别现象。所以哪怕上千万也就不去管它了,稍微慢点一点都不影响什么。
|
12
sagaxu 2020-07-03 15:47:53 +08:00 via Android
才 1000 万也要分表?用户表 1 亿也毫无压力。
|
13
DelayNoMay 2020-07-03 15:53:21 +08:00
才 1000 万就要分表,我有张 10 亿的表也照样飞起
|
14
phpbest 2020-07-03 15:56:36 +08:00
库内分表和分区表,有啥区别,有大佬解释一下吗
|
15
mitu9527 2020-07-03 15:58:20 +08:00
@DelayNoMay 10 亿的是动态表?还是静态表?文件大小不得有几十个 G 了。
|
16
bzj 2020-07-03 16:03:21 +08:00 1
根据我多年经验,事实上采用 MySQL 的项目 90%都用不到分库分表, 真正用得上的不会用 MySQL
|
17
cubecube 2020-07-03 16:30:00 +08:00 via Android 6
当年被 cto 一上来就分库分表,搞得想死。最后那个项目客户数不到 1w
|
18
594duck 2020-07-03 16:34:45 +08:00 via iPhone
@DelayNoMay 10 亿多宽,是只写不查么
|
19
srx1982 2020-07-03 16:39:57 +08:00
分个区就得了,别瞎改
|
20
caola 2020-07-03 16:47:42 +08:00
1000W 这太少了点吧,
除非你的查询都不走索引,那确实会慢…… |
21
leonidas 2020-07-03 17:05:10 +08:00
楼主问分库分表连表查询的解决方案,楼上全是 1000 万太少了,不分。。。
那我替楼主改下吧,100 亿的数据分库分表如何连表查询 |
23
gadsavesme 2020-07-03 17:20:05 +08:00
1000w 数据正常的分区就可以了吧。没明白为什么和小表 join 会跨库。和用户表不在一个库里吗?个人觉得要么做一些冗余的字段,要么就是用户表做一下冷热垂直拆分,join 的那些字段单独拆成一张表呗不做分区。1000w 数据走索引应该不会出现性能上的瓶颈才是
|
25
cubecube 2020-07-03 17:39:44 +08:00 via Android
@chendy 关键是公司有 oracle 授权,我说直接 oracle 快速上线吧,结果 mysql 愣是分 100 多个表。商城性质,中间处理各种跨库场景,天天加班,延期。。最后,你懂的。
|
26
dongisking 2020-07-03 18:02:03 +08:00
@phpbest 分区的横向扩展性差,等于加了个磁盘,io 没变化
|
27
freelancher 2020-07-03 23:53:09 +08:00
1000W 用户没必要分库分表啊。优化做好来,请个专门搞这个的 DBA 就好了。给自己加活。
兼职 DBA 在这里。。。举手。 |
28
lance6716 2020-07-05 15:50:19 +08:00 via Android
换 tidb
|
29
phpbest 2020-07-06 09:57:23 +08:00
@dongisking 那库内分表有作用吗
|