专栏首页物流IT圈如何提高JDBC插入速度?

如何提高JDBC插入速度?

1. 不要用JDBC

  大部分数据库有自己原生的处理大量插入工具,如果你的数据符合这些工具支持的格式,那么你就很难找到比这个选项更快的方法了。

2.使用Prepared Statements

  Prepared statement通过一次性编译SQL能降低插入时间,而且还能有助于防止SQL注入攻击。一旦一个Prepared statement语句被数据库引擎分析好后,客户端只需要发送需要插入的数据即可,无需每次发送整个SQL语句。

3.使用批插入

  通过某些案例测试发现,使用批处理语句进行100个记录的插入,整体插入时间会从普通的3.5分钟降低到1秒。但是这个方法也有一些缺陷:1). 数据可能不完美,可能会因为重复ID引起一些记录没有插入或重复插入,2).需要将你的原始数据格式转换到符合批处理的数据格式。

DataReader reader = new CSVReader(new File("data/hospital.csv"))

.setFieldNamesInFirstRow(true);

reader = new TransformingReader(reader, discardWriter, "error_message")

.add(new RenameField("Provider Number", "hospital_id"))

.add(new BasicFieldTransformer("hospital_id").stringToLong())

.add(new RenameField("Hospital Name", "hospital_name"))

.add(new RenameField("Address 1", "address1"))

.add(new RenameField("Address 2", "address2"))

.add(new RenameField("Address 3", "address3"))

.add(new RenameField("City", "city"))

.add(new RenameField("State", "state"))

.add(new RenameField("ZIP Code", "zip_code"))

.add(new RenameField("County", "county"))

.add(new RenameField("Phone Number", "phone_number"))

.add(new RenameField("Hospital Type", "hospital_type"))

.add(new RenameField("Hospital Ownership", "hospital_ownership"))

.add(new RenameField("Emergency Services", "emergency_services"))

.add(new SetCalculatedField("emergency_services",

"decode(emergency_services, 'Yes', true, 'No', false)"));

DataWriter writer = new JdbcWriter(getConnection(), "hospital")

.setBatchSize(BATCH_SIZE);

Job job = Job.run(reader, writer);

System.out.println("Time: " + job.getRunningTimeAsString());

4.使用多个连接

  这个取决于你的数据库和配置,使用更多数据库连接用于插入会提高性能,经过测试发现,对于某个大型数据库,将连接提高到5个可以提升速度,但是超过5个就没有什么用处了。

5.临时失效一致性约束

  这个主意需要小心,会破坏几个表之间数据的完整性与一致性,失效完整一致性检查意味着你的数据库不会再为每条记录检查数据完整性了,从而提升插入性能,当然不要忘记插入完成后重新激活完整性约束。

本文分享自微信公众号 - 物流IT圈(exiter18)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 仓库标准作业流程与WMS系统规划(中)

    “无论B2B退货,还是B2C退货,待商品退货库房以后,均需经过收货、验收以后,上架员根据验收的结论,将合格品上架至合格品区域,不合格品上架至不合格品区域...

    物流IT圈
  • 全球5G实力大比拼

    当下5G正在成为一个越来越热的话题,为了打压中国5G的发展,世界上一些大国使出各种手段,很多早已经不局限于技术和经济手段,甚至出现绑架中国企业的高管的极端手腕。...

    物流IT圈
  • 分布式系统基石--幂等接口设计

    随着互联网的发展,后台服务的承载量越来越大,性能多高的单台机器也无法满足无限制增长的承载量,同时互联网业务的特点往往要求服务快速扩容,如此这些特点,使得...

    物流IT圈
  • java版本的学生管理系统

    1 import java.awt.BorderLayout; 2 import java.awt.Color; 3 import java.awt...

    Gxjun
  • 微信早报 | 腾讯、吉利将给高铁装 WiFi;微视抖音争夺视频达人资源

    知晓君
  • 用firebug给firefox添加信任链接

      在前文“firefox查看微信公众平台的数据分析时就出现不信任链接怎么办?”我们使用了导入证书的方法添加信任链接,有网友反映说证书导入不成功,这里用另外一种...

    ytkah
  • 资产安全管理的“智胜法宝”|资产识别篇

    早在2015年,斗象科技在首届FIT互联网安全创新大会上提出了以IT资产为核心构建企业安全风险检测防御体系,并以此为核心理念自主研发了全息智能安全威胁分析系统—...

    FB客服
  • R语言ggplot2环形图小例子

    https://www.r-graph-gallery.com/128-ring-or-donut-plot.html

    用户7010445
  • 如何在多台服务器添加ssh的免密码登录 顶

    然后分别ping node1,node2,node3我们可以看到都可以ping的通了

    算法之名
  • [Memcache] memcache中add和set方法的区别

    add方法添加时,如果存在返回false set方法添加时,如果存在就是覆盖,不存就是添加

    陶士涵

扫码关注云+社区

领取腾讯云代金券