测试环境:
Intel Xeon 2.4G四核心 2.5G内存
Server 2003 Enterprise Edition Service Pack 2
Oracle9i Enterprise Edition 9.2.0.1.0
jdk1.5.0_12
ojdbc14.jar
建立测试表:
CREATE TABLE TEST
(
TEST_ID NUMBER(10, 0),
TEST_NAME VARCHAR2(50),
TEST_TIME TIMESTAMP,
TEST_VALUE NUMBER(10, 3)
);
连接Oracle过程略。
一个测试用的类:
public class Util {
public static Random rand = new Random();
public static String atoz = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String genString(int length)
{
StringBuilder re = new StringBuilder(length);
for (int i = 0; i < length; i++)
{
re.append(atoz.charAt(rand.nextInt(52)));
}
return re.toString();
}
public static double genDouble()
{
double d1 = 2500 * rand.nextDouble();
double d2 = 500000 * rand.nextDouble();
return d1 + d2;
}
}
拼sql入库:
public static void simpleInsert(int total) throws Exception {
Thread.sleep(3000);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Timestamp current = new Timestamp(System.currentTimeMillis());
String currentStr = dateFormat.format(current);
Connection conn = DriverManager.getConnection(dbURL, user, password);
try {
long begin = System.currentTimeMillis();
Statement s = conn.createStatement();
for (int i = 1; i <= total; i++) {
String sql = String.format("INSERT INTO TEST (TEST_ID, TEST_NAME, TEST_TIME, TEST_VALUE) VALUES (%s, '%s', to_date('%s','yyyy-MM-dd HH24:mi:ss'), %s)", i, Util.genString(5), currentStr, Util.genDouble());
s.executeUpdate(sql);
}
long end = System.currentTimeMillis();
System.out.printf("Count:%d Time:%d\n", total, (end - begin));
} catch (Exception ex) {
ex.printStackTrace();
} finally {
conn.close();
}
}
测试结果:
Count:10240 Time:25203
Count:10240 Time:23891
Count:10240 Time:24516
Count:10240 Time:24891
Count:10240 Time:25063
Count:10240 Time:24359
Count:10240 Time:23547
Count:10240 Time:24312
Count:10240 Time:23938
Count:10240 Time:24687
总结:
平均入库速度每1万条23.87秒
绑定参数法入库:
public static void traditionalInsert(int total) throws Exception {
Thread.sleep(3000);
Timestamp current = new Timestamp(System.currentTimeMillis());
Connection conn = DriverManager.getConnection(dbURL, user, password);
try {
long begin = System.currentTimeMillis();
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement("INSERT INTO TEST (TEST_ID,TEST_NAME,TEST_TIME,TEST_VALUE) VALUES (?, ?, ?, ?)");
for (int i = 1; i <= total; i++) {
ps.setInt(1, i);
ps.setString(2, Util.genString(5));
ps.setTimestamp(3, current);
ps.setBigDecimal(4, new BigDecimal(Util.genDouble()));
ps.addBatch();
if ((i % 500) == 0) {
ps.executeBatch();
}
}
ps.executeBatch();
conn.commit();
long end = System.currentTimeMillis();
System.out.printf("Count:%d Time:%d\n", total, (end - begin));
} catch (Exception ex) {
ex.printStackTrace();
conn.rollback();
} finally {
conn.close();
}
}
测试结果:
Count:512000 Time:33000
Count:512000 Time:31344
Count:512000 Time:31407
Count:512000 Time:31281
Count:512000 Time:31891
Count:512000 Time:31219
Count:512000 Time:31844
Count:512000 Time:32125
Count:512000 Time:32047
Count:512000 Time:33141
总结:
平均入库速度每100万条62.36秒
绑定参数法虽然比较快,但是还有没有挖掘的空间?
每500条执行一次executeBatch是不是最合适的?
Java中有没有数组绑定法?
有待进一步考察……
分享到:
相关推荐
在Java中操作Oracle数据库进行批量入库时,可能会遇到性能问题,这涉及到数据库优化、批处理策略以及数据类型的选择。以下是一些关键知识点: 1. **Oracle自定义类型(Table类型)**: Oracle允许创建自定义的表...
作者进行了不同方式的性能测试,比较了Oracle自定义类型、基本类型定义表类型以及JDBC批处理的插入速度。通常,批处理和自定义类型都是为提高批量操作效率而设计的,但实际效果可能会因数据量、网络延迟、数据库...
本系统基于Java编程语言,并利用Oracle数据库作为后台数据存储,这样的组合确保了系统的稳定性和高效性。Java以其跨平台特性、强大的类库支持和面向对象的设计理念,成为开发此类系统的理想选择;而Oracle数据库则以...
Java版的仓库管理系统是一款基于Java编程语言开发的应用软件,主要用于企业或组织内部的库存控制和管理。这个系统设计的核心目标是提升库存效率,减少错误,优化资源分配,并提供实时的库存数据,帮助决策者做出明智...
Java图书管理系统是一个基于Java编程语言开发的软件应用,主要用于图书馆的日常运营,包括图书的入库、出库、借阅、归还以及各种查询操作。这个系统通常由前端用户界面和后端服务器两部分组成,使用数据库来存储图书...
图书管理系统是一种用于管理图书馆内图书信息的应用软件,它可以帮助图书馆员高效地进行图书的入库、出库、借阅、归还等操作。本系统采用Java语言进行开发,充分体现了Java在企业级应用中的强大功能。以下是关于这个...
Java进销存系统是基于Java技术开发的一种企业管理软件,主要用于管理企业的销售、采购以及库存等业务流程。在本文中,我们将深入探讨Java进销存系统的概念、架构、核心技术及其实现过程。 一、进销存系统概述 进销...
这种方法相比当前广泛采用的技术手段,在速度、可靠性和自动化水平上都有显著提升,同时能够减轻数据服务器的压力,提高监测效率。 #### 关键词解析 - **ArcSDE数据库**:由ESRI公司提供的空间数据引擎,作为ArcGIS...
1. 数据库连接:Java通过JDBC(Java Database Connectivity)接口,实现与各种数据库(如MySQL、Oracle等)的无缝对接,进行数据的存取和操作。 2. 用户界面:Java Swing或JavaFX库用于构建用户友好的图形界面,...
使用Java SE(标准版)作为基础,结合Servlet和JSP技术,构建了系统的后端逻辑。Servlet负责处理HTTP请求,执行业务逻辑,而JSP用于生成动态HTML页面,展示数据。 2. **数据库设计与管理**:库存数据的存储通常需要...
这个过程中,可能需要用到编程语言(如Python或Java)编写脚本,或者利用专门的日志分析工具(如ELK Stack:Elasticsearch, Logstash, Kibana)。通过对日志数据的统计、可视化,可以发现服务器的使用模式,追踪异常...
Java仓库管理系统主要分为库存管理、入库出库管理、库存盘点、报表统计等多个模块,实现了从商品入库到出库的全程跟踪,确保库存数据的实时性和准确性。系统采用B/S架构,用户通过浏览器即可进行操作,降低了客户端...
同时,还需要进行充分的测试,包括单元测试、集成测试和压力测试,确保系统的稳定性和可靠性。 综上所述,"SSH+Oracle网上购物系统"是一个集成了强大技术栈的电子商务平台,结合了高效的Web框架和数据库管理系统,...
【超市管理系统(Java)】是一个基于Java编程语言开发的软件应用,主要目的是为了高效地管理超市的日常运营,包括商品的入库、出库、库存管理、销售记录、会员管理、财务管理等多个方面。这个系统通常采用模块化设计...
- **数据库连接**:使用JDBC(Java Database Connectivity)接口与数据库进行交互,如MySQL、Oracle等,进行数据的读写操作。 3. **数据库设计**: - **表结构**:设计图书表、用户表、借阅记录表等,明确各字段...
此外,性能测试和压力测试可以帮助优化系统,提高响应速度和并发处理能力。 总的来说,JAVA进销存系统毕业设计是一个全面了解和实践Java开发技能的项目,涵盖了数据库设计、前端开发、后端服务、业务逻辑和系统测试...
在仓库管理系统中,通常会选择关系型数据库如MySQL或Oracle来存储大量结构化的库存信息,通过JDBC(Java Database Connectivity)接口进行数据交互。此外,还可以利用对象关系映射框架如Hibernate或MyBatis,简化...