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

求指点, PHP 脚本操作 MYSQL 数据库批量插入数据问题

  •  
  •   2ME · 2017-05-26 12:03:17 +08:00 · 1994 次点击
    这是一个创建于 2515 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原来都没注册一直默默刷帖.. 今天遇到了解决不了的问题来求助大神
    第一次发帖如果有没说清楚的地方麻烦指出来楼下会补充编辑

    新手初级 PHP 程序员遇到了效率问题

    需求: 有一个源数据库为 A 库 若干个需要插入数据的数据库统称为 B 库 最少 100 个这样子
    现在需要从 A 库取数据插入 B 库,每个 B 库每天从 A 库取 1000 条进行插入操作
    也就是循环 100 次脚本 每次往 B 库插入 1000 条
    脚本是在本地跑 写完了之后测试脚本往本地的一个数据库插入数据要 15S 左右 后期数据累计多了 20S 左右
    但是今天实际往生产数据库插入数据测试了一下跑一个库要 15min 左右,后期数据多了肯定会更慢
    时间完全不能接受,这样算下来跑 100 个库就起码要 24 小时了

    插入数据不是简单的数据取出来就插进去就算了 有验证重复的过程 主表插入数据 其他表也会插入相关数据
    本来是验证最花时间 现在验证过程已经经过处理了 跑一次 B 库只会和 B 库做一次数据交互
    所以效率影响基本可以忽略不计 主要是插入数据时候影响的效率
    数据是单条插入 因为主数据插入后获得主键用来后面修改数据以及插入其他表数据
    用事务批量插入的话不可行

    求 V2 的程序员给给调整意见 有需要补充信息的话会在下面补充

    说升级服务器或者修改表结构之类的就算了.. 我没那么高权限 我能做的就是尽力去实现领导需求

    5 条回复    2017-05-28 09:53:18 +08:00
    2ME
        1
    2ME  
    OP
       2017-05-26 13:22:51 +08:00
    目前有个想法是插入到本地数据库把数据库 然后读 B 库的最后一个 ID 再把本地数据库的读出来 循环赋值主键 然后用事务插入 B 库 不知道是否可行
    2ME
        2
    2ME  
    OP
       2017-05-26 14:05:26 +08:00
    好像忘了说 数据库服务器在美帝 - -
    chouchangcn
        3
    chouchangcn  
       2017-05-26 15:43:11 +08:00
    异地读数据当然是网络延迟的原因。。。
    2ME
        4
    2ME  
    OP
       2017-05-26 16:10:45 +08:00
    @chouchangcn = = 我是本地读数据存到异地数据库
    chouchangcn
        5
    chouchangcn  
       2017-05-28 09:53:18 +08:00
    @2ME 你这每次建立数据库的链接不需要时间么。。自己分析看看嘛。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1054 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:22 · PVG 02:22 · LAX 11:22 · JFK 14:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.