前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何提高JDBC插入速度?

如何提高JDBC插入速度?

作者头像
物流IT圈
发布2019-07-16 14:07:24
1.5K0
发布2019-07-16 14:07:24
举报
文章被收录于专栏:物流IT圈物流IT圈

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.临时失效一致性约束

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 驼马精英 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 不要用JDBC
  • 2.使用Prepared Statements
  • 3.使用批插入
  • 4.使用多个连接
  • 5.临时失效一致性约束
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档