JFinal 与MySQL的一个大量数据入库的问题

littlebin 发布于 2016/09/11 21:23
阅读 1K+
收藏 0
JFinal大神,现在是这样一个情况,使用JFinal作为Web服务器,Mysql5.6为数据库服务器,Excel数据导入,数据量5-6万行,但每行记录需要插入两张相关联的表,使用Db.save方法,全部放到一个事务中提交。症状是:如果Web服务器与Mysql在同一物理机上,入库时间大约在20秒左右,但,如果Web服务器和MySQL服务器不在同一台机器上,通过LAN相连(网络非常畅通),则入库时间非常长,要好几分钟, 原因在哪里呢?是因为大量的非批量操作会导致网络上数据的频繁传输而影响了入库时间么?但如果使用batch的话,又无法得到主键值,从而无法入两个关联表,怎么解?
加载中
0
纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
五六万行的excel应该很大了,我之前做的用PHP做的导入,几千行就到了2-4M的大小。数据处理之后发送信息会增大,你的lan是多大的带宽,即使网络在好,如果是百兆的也有12M的速度,这还是理论的。一般采用大量数据插入我采用了异步插入,互不影响。你这个主要问题是网络产生的。LAN线路,网卡负载...
0
JFinal
JFinal

      网络传输会消耗一定的时间,可以先确定数据量的大小,然后通过纯 ftp 或的方式测试网络传输的时间长度。

     此外五六万行数据在本地导入需要 20 秒仍然是太长了,建议使用 Db.batch,并将 batchSize 设置为 2000 左右进行导入。至于主键值获取的问题,可以是分步骤查询并获取,准备好这五六万条数据所有数据以后,再调用 Db.batch

0
tonysb
tonysb
Db.batch,现在是要是批量的,我都是用这个方法去insert数据库的
0
littlebin
littlebin

嗯,基本已经解决。还是用的batch方法,6W条excel,实际入库记录为12W,的batch时间大概1~2分钟,可以接受。

只是有两点比较麻烦,一是必须事先生成ID,并设置好两张表的关联,二是batch之前必须先锁表

返回顶部
顶部