V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zxdhuge
V2EX  ›  数据库

JAVA 读取大文件导入数据库

  •  
  •   zxdhuge · Sep 19, 2016 · 2073 views
    This topic created in 3507 days ago, the information mentioned may be changed or developed.

    JAVA 读取 6 个文件,一共 16w 行,插入 oracle 数据库,不用考虑重复,每条记录有两个字段是外键。 现在起了 6 个线程读 6 个文件分别处理,耗时 7 秒左右。 感觉瓶颈在磁盘 io ,多线程也没啥效果,请问还有什么优化方案?

    14 replies    2016-09-22 15:55:00 +08:00
    wuhang89
        1
    wuhang89  
       Sep 19, 2016
    你怎么优化算法都没有 raid0 外加固态硬盘效果明显,建议更换硬件。
    tjxjj
        2
    tjxjj  
       Sep 19, 2016
    干嘛用 java...sqlload 啊
    husky
        3
    husky  
       Sep 19, 2016
    文件大吗?试试放到 /dev/shm 下
    clino
        4
    clino  
       Sep 19, 2016
    确定瓶颈在磁盘 IO? 是说读文件慢还是写到数据库慢?
    zxdhuge
        5
    zxdhuge  
    OP
       Sep 19, 2016
    @tjxjj 还需要给每条记录加唯一标识,不能直接 load
    @husky @clino 我觉得应该是写数据库的时候慢吧。读文件我是一次性全部读到内存,然后 split ,写数据库用了 batch 批处理。
    skydiver
        6
    skydiver  
       Sep 19, 2016
    多线程比单线程还慢是正常的……
    skydiver
        7
    skydiver  
       Sep 19, 2016
    并发插入还不如顺序插入快
    skydiver
        8
    skydiver  
       Sep 19, 2016
    而且一共就几秒,优化个啥劲儿……要是耗时几小时还值得优化……
    hcymk2
        9
    hcymk2  
       Sep 19, 2016
    @zxdhuge
    记录的唯一 id , 先加好再导。
    oralce 批量导入数据 还是用 sqlldr 快点。
    yidinghe
        10
    yidinghe  
       Sep 19, 2016 via Android
    每行 1KB 算一共 100 多 M , 7 秒读取完毕算是到了 IO 瓶颈了吧。
    sylecn
        11
    sylecn  
       Sep 19, 2016
    @skydiver 就是就是。除非你还有很多个这样的文件,或者你是闲得慌的 DBA ,不然秒级别的导入根本不需要优化。

    同意上面多线程可能更慢的说法。

    另外性能调优不要看感觉。 CPU ,内存, IO 这些都有工具可以测量他们的实际负载情况 (top, vmstat, iostat)。
    otakustay
        12
    otakustay  
       Sep 19, 2016
    要不试试把外键删了能快多少?
    romisanic
        13
    romisanic  
       Sep 19, 2016
    怎么感觉都不像是到了 io 的瓶颈啊
    确定程序没有优化空间了?
    ytmsdy
        14
    ytmsdy  
       Sep 22, 2016
    如果够豪,数据库服务器上 ssd ,多快好省。
    如果闲工夫比较多,那么试试看把外键去掉,然后再试试看。看看 cpu 数据在导入的时候的使用率,看看内存看是不是一次性把数据加载到内存里面了。最后再看看 IO,其实我觉得 IO 问题是最好解决的,直接上 ssd 就好了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5810 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 400ms · UTC 03:37 · PVG 11:37 · LAX 20:37 · JFK 23:37
    ♥ Do have faith in what you're doing.