我们现在有个 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 ![]() 3000w 数据,MySQL8 单机低配也许都能查的起飞。 |
16 poembre 2023-09-08 09:43:23 +08:00 ![]() 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 ![]() 不走索引 100w 都慢,用好索引以现在 nvme 的速度几亿不是问题 |
![]() | 27 me1onsoda 2023-09-08 11:47:12 +08:00 3000 千万。。"单表超过 3000w 性能迅速下降"这是十年前老 dba 念的口诀。。 然而时至今日,已经不适用了,那时候 hhd 是主流 |
![]() | 28 hahamy 2023-09-08 12:43:27 +08:00 ![]() @morri 用了几次,确实牛,今年升级了个版本,默认支持读写一致性 缺点就是贵,真贵,好贵 |
29 kuituosi 2023-09-08 13:03:25 +08:00 via Android 分区表的缺点是除非你们对 sql 进行详细审查,否则跨表扫描就是灾难。普通研发团队还是老老实实的分表或者分布式数据库吧 |
![]() | 30 sunmoon1983 OP @kuituosi 为什么还要审查 sql ?我记住用 ORM 的时候必须加上在分区里面查询的标记不就行了吗? |
![]() | 31 SethShi 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 Cruzz 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 好吧,尊重你的情结 |