• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dackh
V2EX  ›  程序员

有没有办法把 4 亿数据在四个小时内打散到 100 张表内

  •  
  •   dackh ·
    dackh · Nov 25, 2019 · 5275 views
    This topic created in 2387 days ago, the information mentioned may be changed or developed.

    rt... 头发快掉完了

    Supplement 1  ·  Nov 26, 2019
    现在的场景是原表数据 4 亿,我分表 100 张,打算停服将数据打散

    开了 40 个 go 协程,每个协程根据主键 id 划分,每个捞 1000w,分 100 次,每次捞 10W。

    捞完 10W 的数据取模分组,批量插入到对应的表中。

    这样方法,1E 用了 40 分钟,2E 用来 2 小时 30 分钟。

    在想先把索引砍掉,迁完数据再建索引,大概能快多少?
    Supplement 2  ·  Nov 27, 2019
    嗯,脚本已经很快了,DB 被我跑挂了,瓶颈应该在磁盘 IO 上..
    27 replies    2019-11-27 00:11:00 +08:00
    opengps
        1
    opengps  
       Nov 25, 2019 via Android
    4 亿的体积是多大
    MinQ
        2
    MinQ  
       Nov 25, 2019 via Android
    spark 应该可以吧
    dackh
        3
    dackh  
    OP
       Nov 25, 2019
    @MinQ mysql
    lihongjie0209
        4
    lihongjie0209  
       Nov 25, 2019
    计算一下 io 速度不就知道了吗
    mengzhuo
        5
    mengzhuo  
       Nov 25, 2019
    很简单啊,分而治之
    先测一台实例能承接多少 qps,能不能分库。

    假设数据平均的话,400M/4/100/3600 ≈ 277 qps 而已
    mengzhuo
        6
    mengzhuo  
       Nov 25, 2019
    insert 太慢的话,可以接受的话,索引先全关掉,然后再建
    dackh
        7
    dackh  
    OP
       Nov 25, 2019
    @lihongjie0209 怎么计算?
    dackh
        8
    dackh  
    OP
       Nov 25, 2019
    @mengzhuo 我试过 insert 一分钟只能 100w,4e 的话就需要接近 10 个小时了
    dr1q65MfKFKHnJr6
        9
    dr1q65MfKFKHnJr6  
       Nov 25, 2019
    分库? 同时做数据同步?
    dackh
        10
    dackh  
    OP
       Nov 25, 2019
    @cedoo22 不分库,业务可以停,准备停业务数据直接打散,看来做不到了,准备放弃
    chengran630
        11
    chengran630  
       Nov 25, 2019
    如果是阿里云 可以买个临时服务器 上 essd,最高配置(配置越高 磁盘速度越高)
    dusu
        12
    dusu  
       Nov 25, 2019 via iPhone
    1. 关所有 log/binlog
    2. batch insert
    3. 多进 /线程
    4. tmp 目录指 /dev/shm 目录
    5. 上 ssd

    插入速度取决于你的硬盘读写速度。
    4e 问题不大
    jugelizi
        13
    jugelizi  
       Nov 25, 2019
    可以 不要用 insert 直接用 mysql 组装数据
    csunny
        14
    csunny  
       Nov 25, 2019
    bigquery
    husinhu
        15
    husinhu  
       Nov 25, 2019 via Android
    load data infile
    liuzhaowei55
        16
    liuzhaowei55  
       Nov 25, 2019 via Android
    方便的话可以说一下具体的场景啊,有可能并不需要一匹跑的更快的马,而是需要一部电话。
    66450146
        17
    66450146  
       Nov 26, 2019
    按照数据的类型想出一个分类手段让数据能够大致平均分成四份(例如按照 timestamp 最后两位 mod 25 ),然后创建四个 view
    levelworm
        18
    levelworm  
       Nov 26, 2019 via Android
    @dackh insert 还是 copy?
    fluorinedog
        19
    fluorinedog  
       Nov 26, 2019 via Android
    这需求闭着眼睛写啊.... sort by hash value, 然后直接 select 出来
    JunoNin
        20
    JunoNin  
       Nov 26, 2019 via Android
    我感觉如果是 insert 到 4 个库里。。磁盘的 io 是瓶颈
    realpg
        21
    realpg  
    PRO
       Nov 26, 2019
    数据库总占用空间多大?
    要是一条记录没多大,那这任务非常简单了。。
    盘足够快就完事。
    比这数据量还大的物理库上云我都搞过
    realpg
        22
    realpg  
    PRO
       Nov 26, 2019
    之前做的一个项目

    MYSQL 5.x,11 亿条数据,数据量不均衡的分布在 47 个表(有的表只有几万条记录,不均衡分布),数据库文件大小 148GiB,数据以 int bigint 类型居多

    导出 sql 文件,然后到新服务器导入大约 20 分钟。
    新服务器是自建私有云,IPSAN 后端存储+NVME 本地缓存
    dackh
        23
    dackh  
    OP
       Nov 26, 2019
    @realpg 文件如何导出来,导出来花了多久
    dackh
        24
    dackh  
    OP
       Nov 26, 2019
    @JunoNin 是啊
    @husinhu 导出来的时候比较花时间
    @dusu 除了 ssd 都上了
    dackh
        25
    dackh  
    OP
       Nov 26, 2019
    artandlol
        26
    artandlol  
       Nov 26, 2019 via Android
    没有 ssd 程序再快也白搭
    realpg
        27
    realpg  
    PRO
       Nov 27, 2019
    @dackh #23
    mysqldump 这个没注意时间 都是固态盘的没几分钟
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1524 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 16:31 · PVG 00:31 · LAX 09:31 · JFK 12:31
    ♥ Do have faith in what you're doing.