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

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

  •  
  •   dackh · 86 天前 · 3303 次点击
    这是一个创建于 86 天前的主题,其中的信息可能已经有所发展或是发生改变。

    rt... 头发快掉完了

    第 1 条附言  ·  85 天前
    现在的场景是原表数据 4 亿,我分表 100 张,打算停服将数据打散

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

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

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

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

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

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

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

    导出 sql 文件,然后到新服务器导入大约 20 分钟。
    新服务器是自建私有云,IPSAN 后端存储+NVME 本地缓存
    dackh
        23
    dackh   85 天前
    @realpg 文件如何导出来,导出来花了多久
    dackh
        24
    dackh   85 天前
    @JunoNin 是啊
    @husinhu 导出来的时候比较花时间
    @dusu 除了 ssd 都上了
    dackh
        25
    dackh   85 天前
    artandlol
        26
    artandlol   85 天前 via Android
    没有 ssd 程序再快也白搭
    realpg
        27
    realpg   85 天前
    @dackh #23
    mysqldump 这个没注意时间 都是固态盘的没几分钟
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1529 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:04 · PVG 02:04 · LAX 10:04 · JFK 13:04
    ♥ Do have faith in what you're doing.