我们现在有个 Oracle 的数据库,有一张实验数据相关的表字段不多
大约 3000W 的数据吧 打算迁移到 Mysql8 中,我在想这张表是直接分区呢还是分表好一些?
1
dw2693734d 2023-09-08 08:35:36 +08:00
迁移到 Postgres 吧, Postgres 语法和 Oracal 差不多。shard 分表也比 mysql 方便许多。
|
2
jwj 2023-09-08 08:41:58 +08:00
用分区表,查询方便,但需要每条查询都带上分区的条件,不然还是会扫描全表。用分表,查询多个分表时,比较麻烦。个人理解,不确保其准确性。
|
3
xomix 2023-09-08 08:43:38 +08:00
随口推一下 TiDB ,基本可以平替,你也不用考虑数据量和性能问题
|
4
gfswoquasfasd 2023-09-08 08:56:04 +08:00
分表啊。mysql 分区表 我劝你别用
|
5
sunmoon1983 OP @xomix TiDB 成本有点高,暂时不考虑
|
6
sunmoon1983 OP @gfswoquasfasd 因为什么呀?有坑,能给说说吗?
|
7
JKeita 2023-09-08 09:04:29 +08:00
分表吧
|
8
sunmoon1983 OP @dw2693734d Postgres 我们这边的开发人员用的不多,积累不太够呀^_^
|
9
changdy 2023-09-08 09:04:41 +08:00
mysql 的分区表比较拉跨 ,对比 postgresql.
不过我也忘记那些点 mysql 的比较拉跨了. 网上分表的 case 也比较少. |
10
8355 2023-09-08 09:07:08 +08:00
3000 万就查不动了嘛。。。
|
11
512357301 2023-09-08 09:19:11 +08:00 via Android
用 clickhouse ,它可以自动同步 MySQL 的数据的,写 MySQL ,读 ck
|
12
linxb 2023-09-08 09:21:47 +08:00
3000 万没啥压力吧
|
13
infante 2023-09-08 09:22:21 +08:00
推荐 postgresql
|
14
easylee 2023-09-08 09:29:31 +08:00 1
3000w 数据,MySQL8 单机低配也许都能查的起飞。
|
16
poembre 2023-09-08 09:43:23 +08:00 4
mysql 单表 8 亿 路过。3kw 这才哪跟哪
|
17
wh469012917 2023-09-08 09:48:32 +08:00
等 3 亿后再考虑这个问题吧,好好优化 SQL ,比什么都强
|
18
wh469012917 2023-09-08 09:49:14 +08:00
@easylee 写好 SQL 用好索引,3 亿都不在话下,Mysql 没那么垃圾
|
19
keppelfei 2023-09-08 10:10:39 +08:00
3000w 才算起步吧
|
20
morri 2023-09-08 10:12:54 +08:00
直接上阿里的 polardb 云数据库, 单表就好了,单表存储是 PB 级别的。
PolarDB 还支持水平扩展,可以看需求动态添加实例。 性能监控,备份什么都有的。 chatGPT-3.5 回复 “PolarDB 是一种高性能、高可用性的云原生关系型数据库服务,可以有效地处理大规模数据,并提供了弹性伸缩和自动备份等功能,使其适用于各种类型的应用和场景。” |
21
sunmoon1983 OP @poembre 我靠,这么牛逼的吗?
|
22
sunmoon1983 OP @easylee 我靠,这么牛逼的吗?
|
23
sunmoon1983 OP @wh469012917 牛逼!!!
|
24
fkdog 2023-09-08 10:21:11 +08:00
查询优化好,单表一亿数据也没问题。
|
25
yejian 2023-09-08 11:40:35 +08:00
昨天刚遇到一个问题,mysql 16 核 64G ;单表 4 亿多条数据,sql 查询有索引,但是几千的并发访问就导致 mysql cpu 飙升。
|
26
makelove 2023-09-08 11:46:42 +08:00 1
不走索引 100w 都慢,用好索引以现在 nvme 的速度几亿不是问题
|
27
me1onsoda 2023-09-08 11:47:12 +08:00
3000 千万。。"单表超过 3000w 性能迅速下降"这是十年前老 dba 念的口诀。。
然而时至今日,已经不适用了,那时候 hhd 是主流 |
29
kuituosi 2023-09-08 13:03:25 +08:00 via Android
分区表的缺点是除非你们对 sql 进行详细审查,否则跨表扫描就是灾难。普通研发团队还是老老实实的分表或者分布式数据库吧
|
30
sunmoon1983 OP @kuituosi 为什么还要审查 sql ?我记住用 ORM 的时候必须加上在分区里面查询的标记不就行了吗?
|
31
seth19960929 2023-09-08 13:45:03 +08:00
看你的场景, 比如有些按日期分, 基本不会存在跨日期查询, 或者不用历史的日期, 基本用当天的. 这种就分表. 反之分区
|
32
nothingistrue 2023-09-08 13:51:12 +08:00
Mysql 你分不了区的,这货要求分区键必须在所有唯一索引之中,意味着你必须要改主键,还是改成复合主键。
|
33
git00ll 2023-09-08 13:56:48 +08:00
3000w ,单表就够了
|
34
b2byco 2023-09-08 14:21:19 +08:00
postgresql 有个问题 hash 分区,没法在关联或者子查询中,动态使用分区键进行分区剪枝,显式的在 sql 中指定分区键可以。14 就有这个问题。
|
36
sadfQED2 2023-09-08 14:26:33 +08:00
单表 10 亿路过,还是 20 多个字段的宽表。堆硬件上去就行了。目前写 QPS 100+,读 QPS 大几千。MySQL 没你想的那么烂
|
37
ltfree 2023-09-08 15:22:37 +08:00
分表
|
38
GuardX 2023-09-08 15:30:08 +08:00
分表也行,分区表看你业务场景了
|
39
tisswb 2023-09-08 15:50:58 +08:00
我的经验是没遇到瓶颈不要乱动 遇到瓶颈能不动就不动
|
40
supernovas 2023-09-08 16:47:34 +08:00
不用分区,也不用分表。PostgreSQL 100 亿的表。
|
41
kuituosi 2023-09-08 16:53:18 +08:00
@sunmoon1983 不是每个人每次都能记住这个地方有分区表因素,是人就会犯错不犯错的是神仙
|
42
masterclock 2023-09-08 17:12:40 +08:00
当开始考虑 MySQL 怎么怎么的时候,直接换 TiDB
|
43
mywowo 2023-09-08 17:16:17 +08:00
站一波 PG
|
44
Richared 2023-09-08 17:22:09 +08:00
才 3000w ,单表我最多写过 1.2 个亿,除了导入时间长,读取没有任何问题,只要不出事只管用。
|
45
caion 2023-09-08 17:26:13 +08:00
Mysql8 分区只支持 InnoDB 引擎。分区键必须是主键的一部分,分区键值被更新时,mysql 会移动数据到新的分区,造成较大性能成本。分区表不支持并行查询(垃圾),没法充分利用多核 cpu
|
47
adoal 2023-09-08 21:33:18 +08:00
当你还没开始用 MySQL 就考虑 MySQL 够不够用、要不要用 trick 的时候,不如用 PG 。
当你要从 Oracle 迁出,但目标系统还尚未投入成本建的时候,干脆用 PG 。 |
48
adoal 2023-09-08 21:34:39 +08:00
至于 PG“我们这边的开发人员用的不多,积累不太够呀”……我觉得你会来开贴问这个问题,基本上 MySQL 也没啥高级技能积累。
|
49
crazyweeds 2023-09-08 23:31:43 +08:00
PG 吧,我之前也觉得 MySQL 很好,但我现在觉得 PG 更好。
|
50
changwei 2023-09-09 11:34:09 +08:00
不知道你 3000W 行的表空间用多大,不到 5GB 的话可以试试看 TiDB Serverless ,0 成本启动,免费使用 5GB 存储容量,开箱即用
|
51
tairan2006 2023-09-09 14:51:39 +08:00 via Android
3000 万单表足矣
|
52
vitoliu 2023-09-09 22:24:41 +08:00
推荐使用 drds/polardb
比 Oracle 便宜太多了。 迁到别的数据库,后续都有学习成本和运维成本。 |
53
sunmoon1983 OP @adoal 我们是基本上 MySQL 也没啥高级技能积累,但是毕竟 MySQL 相对于 PG 来说,用的多一些呀
|
54
adoal 2023-09-10 16:56:36 +08:00
@sunmoon1983 好吧,尊重你的情结
|