V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dackh
V2EX  ›  程序员

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

  •  
  •   dackh ·
    dackh · 2019-11-25 20:26:12 +08:00 · 4611 次点击
    这是一个创建于 1810 天前的主题,其中的信息可能已经有所发展或是发生改变。

    rt... 头发快掉完了

    第 1 条附言  ·  2019-11-26 15:58:41 +08:00
    现在的场景是原表数据 4 亿,我分表 100 张,打算停服将数据打散

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

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

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

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

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

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

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

    导出 sql 文件,然后到新服务器导入大约 20 分钟。
    新服务器是自建私有云,IPSAN 后端存储+NVME 本地缓存
    dackh
        23
    dackh  
    OP
       2019-11-26 15:48:34 +08:00
    @realpg 文件如何导出来,导出来花了多久
    dackh
        24
    dackh  
    OP
       2019-11-26 15:55:21 +08:00
    @JunoNin 是啊
    @husinhu 导出来的时候比较花时间
    @dusu 除了 ssd 都上了
    dackh
        25
    dackh  
    OP
       2019-11-26 15:59:14 +08:00
    artandlol
        26
    artandlol  
       2019-11-26 16:42:55 +08:00 via Android
    没有 ssd 程序再快也白搭
    realpg
        27
    realpg  
       2019-11-27 00:11:00 +08:00
    @dackh #23
    mysqldump 这个没注意时间 都是固态盘的没几分钟
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   933 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:52 · PVG 05:52 · LAX 13:52 · JFK 16:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.