V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
sunmoon1983
V2EX  ›  MySQL

Mysql 是用分区表,还是直接分表?

  •  
  •   sunmoon1983 · 2023-09-08 08:32:49 +08:00 · 5544 次点击
    这是一个创建于 452 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们现在有个 Oracle 的数据库,有一张实验数据相关的表字段不多

    大约 3000W 的数据吧 打算迁移到 Mysql8 中,我在想这张表是直接分区呢还是分表好一些?

    54 条回复    2023-09-10 16:56:36 +08:00
    dw2693734d
        1
    dw2693734d  
       2023-09-08 08:35:36 +08:00
    迁移到 Postgres 吧, Postgres 语法和 Oracal 差不多。shard 分表也比 mysql 方便许多。
    jwj
        2
    jwj  
       2023-09-08 08:41:58 +08:00
    用分区表,查询方便,但需要每条查询都带上分区的条件,不然还是会扫描全表。用分表,查询多个分表时,比较麻烦。个人理解,不确保其准确性。
    xomix
        3
    xomix  
       2023-09-08 08:43:38 +08:00
    随口推一下 TiDB ,基本可以平替,你也不用考虑数据量和性能问题
    gfswoquasfasd
        4
    gfswoquasfasd  
       2023-09-08 08:56:04 +08:00
    分表啊。mysql 分区表 我劝你别用
    sunmoon1983
        5
    sunmoon1983  
    OP
       2023-09-08 09:03:34 +08:00
    @xomix TiDB 成本有点高,暂时不考虑
    sunmoon1983
        6
    sunmoon1983  
    OP
       2023-09-08 09:03:52 +08:00
    @gfswoquasfasd 因为什么呀?有坑,能给说说吗?
    JKeita
        7
    JKeita  
       2023-09-08 09:04:29 +08:00
    分表吧
    sunmoon1983
        8
    sunmoon1983  
    OP
       2023-09-08 09:04:39 +08:00
    @dw2693734d Postgres 我们这边的开发人员用的不多,积累不太够呀^_^
    changdy
        9
    changdy  
       2023-09-08 09:04:41 +08:00
    mysql 的分区表比较拉跨 ,对比 postgresql.
    不过我也忘记那些点 mysql 的比较拉跨了. 网上分表的 case 也比较少.
    8355
        10
    8355  
       2023-09-08 09:07:08 +08:00
    3000 万就查不动了嘛。。。
    512357301
        11
    512357301  
       2023-09-08 09:19:11 +08:00 via Android
    用 clickhouse ,它可以自动同步 MySQL 的数据的,写 MySQL ,读 ck
    linxb
        12
    linxb  
       2023-09-08 09:21:47 +08:00
    3000 万没啥压力吧
    infante
        13
    infante  
       2023-09-08 09:22:21 +08:00
    推荐 postgresql
    easylee
        14
    easylee  
       2023-09-08 09:29:31 +08:00   ❤️ 1
    3000w 数据,MySQL8 单机低配也许都能查的起飞。
    wqhui
        15
    wqhui  
       2023-09-08 09:31:04 +08:00   ❤️ 1
    @512357301 业务读 clickhouse 就不怕炸吗,clickhouse 推荐 qps 只有 100
    poembre
        16
    poembre  
       2023-09-08 09:43:23 +08:00   ❤️ 4
    mysql 单表 8 亿 路过。3kw 这才哪跟哪
    wh469012917
        17
    wh469012917  
       2023-09-08 09:48:32 +08:00
    等 3 亿后再考虑这个问题吧,好好优化 SQL ,比什么都强
    wh469012917
        18
    wh469012917  
       2023-09-08 09:49:14 +08:00
    @easylee 写好 SQL 用好索引,3 亿都不在话下,Mysql 没那么垃圾
    keppelfei
        19
    keppelfei  
       2023-09-08 10:10:39 +08:00
    3000w 才算起步吧
    morri
        20
    morri  
       2023-09-08 10:12:54 +08:00
    直接上阿里的 polardb 云数据库, 单表就好了,单表存储是 PB 级别的。

    PolarDB 还支持水平扩展,可以看需求动态添加实例。

    性能监控,备份什么都有的。

    chatGPT-3.5 回复 “PolarDB 是一种高性能、高可用性的云原生关系型数据库服务,可以有效地处理大规模数据,并提供了弹性伸缩和自动备份等功能,使其适用于各种类型的应用和场景。”
    sunmoon1983
        21
    sunmoon1983  
    OP
       2023-09-08 10:17:29 +08:00
    @poembre 我靠,这么牛逼的吗?
    sunmoon1983
        22
    sunmoon1983  
    OP
       2023-09-08 10:17:41 +08:00
    @easylee 我靠,这么牛逼的吗?
    sunmoon1983
        23
    sunmoon1983  
    OP
       2023-09-08 10:18:06 +08:00
    @wh469012917 牛逼!!!
    fkdog
        24
    fkdog  
       2023-09-08 10:21:11 +08:00
    查询优化好,单表一亿数据也没问题。
    yejian
        25
    yejian  
       2023-09-08 11:40:35 +08:00
    昨天刚遇到一个问题,mysql 16 核 64G ;单表 4 亿多条数据,sql 查询有索引,但是几千的并发访问就导致 mysql cpu 飙升。
    makelove
        26
    makelove  
       2023-09-08 11:46:42 +08:00   ❤️ 1
    不走索引 100w 都慢,用好索引以现在 nvme 的速度几亿不是问题
    me1onsoda
        27
    me1onsoda  
       2023-09-08 11:47:12 +08:00
    3000 千万。。"单表超过 3000w 性能迅速下降"这是十年前老 dba 念的口诀。。
    然而时至今日,已经不适用了,那时候 hhd 是主流
    hahamy
        28
    hahamy  
       2023-09-08 12:43:27 +08:00   ❤️ 1
    @morri 用了几次,确实牛,今年升级了个版本,默认支持读写一致性
    缺点就是贵,真贵,好贵
    kuituosi
        29
    kuituosi  
       2023-09-08 13:03:25 +08:00 via Android
    分区表的缺点是除非你们对 sql 进行详细审查,否则跨表扫描就是灾难。普通研发团队还是老老实实的分表或者分布式数据库吧
    sunmoon1983
        30
    sunmoon1983  
    OP
       2023-09-08 13:11:35 +08:00
    @kuituosi 为什么还要审查 sql ?我记住用 ORM 的时候必须加上在分区里面查询的标记不就行了吗?
    seth19960929
        31
    seth19960929  
       2023-09-08 13:45:03 +08:00
    看你的场景, 比如有些按日期分, 基本不会存在跨日期查询, 或者不用历史的日期, 基本用当天的. 这种就分表. 反之分区
    nothingistrue
        32
    nothingistrue  
       2023-09-08 13:51:12 +08:00
    Mysql 你分不了区的,这货要求分区键必须在所有唯一索引之中,意味着你必须要改主键,还是改成复合主键。
    git00ll
        33
    git00ll  
       2023-09-08 13:56:48 +08:00
    3000w ,单表就够了
    b2byco
        34
    b2byco  
       2023-09-08 14:21:19 +08:00
    postgresql 有个问题 hash 分区,没法在关联或者子查询中,动态使用分区键进行分区剪枝,显式的在 sql 中指定分区键可以。14 就有这个问题。
    sadfQED2
        35
    sadfQED2  
       2023-09-08 14:23:43 +08:00
    @512357301 ck 是计算引擎,不是给你当数据库用的
    sadfQED2
        36
    sadfQED2  
       2023-09-08 14:26:33 +08:00
    单表 10 亿路过,还是 20 多个字段的宽表。堆硬件上去就行了。目前写 QPS 100+,读 QPS 大几千。MySQL 没你想的那么烂
    ltfree
        37
    ltfree  
       2023-09-08 15:22:37 +08:00
    分表
    GuardX
        38
    GuardX  
       2023-09-08 15:30:08 +08:00
    分表也行,分区表看你业务场景了
    tisswb
        39
    tisswb  
       2023-09-08 15:50:58 +08:00
    我的经验是没遇到瓶颈不要乱动 遇到瓶颈能不动就不动
    supernovas
        40
    supernovas  
       2023-09-08 16:47:34 +08:00
    不用分区,也不用分表。PostgreSQL 100 亿的表。
    kuituosi
        41
    kuituosi  
       2023-09-08 16:53:18 +08:00
    @sunmoon1983 不是每个人每次都能记住这个地方有分区表因素,是人就会犯错不犯错的是神仙
    masterclock
        42
    masterclock  
       2023-09-08 17:12:40 +08:00
    当开始考虑 MySQL 怎么怎么的时候,直接换 TiDB
    mywowo
        43
    mywowo  
       2023-09-08 17:16:17 +08:00
    站一波 PG
    Richared
        44
    Richared  
       2023-09-08 17:22:09 +08:00
    才 3000w ,单表我最多写过 1.2 个亿,除了导入时间长,读取没有任何问题,只要不出事只管用。
    caion
        45
    caion  
       2023-09-08 17:26:13 +08:00
    Mysql8 分区只支持 InnoDB 引擎。分区键必须是主键的一部分,分区键值被更新时,mysql 会移动数据到新的分区,造成较大性能成本。分区表不支持并行查询(垃圾),没法充分利用多核 cpu
    abcfyk
        46
    abcfyk  
       2023-09-08 20:55:24 +08:00
    @xomix #3 tidb 一生黑。20 年的版本 跨分区查询和事务简直是灾难
    adoal
        47
    adoal  
       2023-09-08 21:33:18 +08:00
    当你还没开始用 MySQL 就考虑 MySQL 够不够用、要不要用 trick 的时候,不如用 PG 。
    当你要从 Oracle 迁出,但目标系统还尚未投入成本建的时候,干脆用 PG 。
    adoal
        48
    adoal  
       2023-09-08 21:34:39 +08:00
    至于 PG“我们这边的开发人员用的不多,积累不太够呀”……我觉得你会来开贴问这个问题,基本上 MySQL 也没啥高级技能积累。
    crazyweeds
        49
    crazyweeds  
       2023-09-08 23:31:43 +08:00
    PG 吧,我之前也觉得 MySQL 很好,但我现在觉得 PG 更好。
    changwei
        50
    changwei  
       2023-09-09 11:34:09 +08:00
    不知道你 3000W 行的表空间用多大,不到 5GB 的话可以试试看 TiDB Serverless ,0 成本启动,免费使用 5GB 存储容量,开箱即用
    tairan2006
        51
    tairan2006  
       2023-09-09 14:51:39 +08:00 via Android
    3000 万单表足矣
    vitoliu
        52
    vitoliu  
       2023-09-09 22:24:41 +08:00
    推荐使用 drds/polardb
    比 Oracle 便宜太多了。
    迁到别的数据库,后续都有学习成本和运维成本。
    sunmoon1983
        53
    sunmoon1983  
    OP
       2023-09-10 14:11:18 +08:00
    @adoal 我们是基本上 MySQL 也没啥高级技能积累,但是毕竟 MySQL 相对于 PG 来说,用的多一些呀
    adoal
        54
    adoal  
       2023-09-10 16:56:36 +08:00
    @sunmoon1983 好吧,尊重你的情结
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1082 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 19:18 · PVG 03:18 · LAX 11:18 · JFK 14:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.