`
oaklet
  • 浏览: 108918 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle入库速度测试(Java版)

    博客分类:
  • java
阅读更多
测试环境:
    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中有没有数组绑定法?
有待进一步考察……
分享到:
评论

相关推荐

    51CTO下载-java-操作Oracle-批量入库的问题.docx

    在Java中操作Oracle数据库进行批量入库时,可能会遇到性能问题,这涉及到数据库优化、批处理策略以及数据类型的选择。以下是一些关键知识点: 1. **Oracle自定义类型(Table类型)**: Oracle允许创建自定义的表...

    51CTO下载-java-操作Oracle-批量入库的问题.pdf

    作者进行了不同方式的性能测试,比较了Oracle自定义类型、基本类型定义表类型以及JDBC批处理的插入速度。通常,批处理和自定义类型都是为提高批量操作效率而设计的,但实际效果可能会因数据量、网络延迟、数据库...

    超市管理系统(基于java)

    本系统基于Java编程语言,并利用Oracle数据库作为后台数据存储,这样的组合确保了系统的稳定性和高效性。Java以其跨平台特性、强大的类库支持和面向对象的设计理念,成为开发此类系统的理想选择;而Oracle数据库则以...

    JAVA版仓库管理系统源代码

    Java版的仓库管理系统是一款基于Java编程语言开发的应用软件,主要用于企业或组织内部的库存控制和管理。这个系统设计的核心目标是提升库存效率,减少错误,优化资源分配,并提供实时的库存数据,帮助决策者做出明智...

    java图书管理系统(源码+数据库).rar

    Java图书管理系统是一个基于Java编程语言开发的软件应用,主要用于图书馆的日常运营,包括图书的入库、出库、借阅、归还以及各种查询操作。这个系统通常由前端用户界面和后端服务器两部分组成,使用数据库来存储图书...

    图书管理系统源代码 java

    图书管理系统是一种用于管理图书馆内图书信息的应用软件,它可以帮助图书馆员高效地进行图书的入库、出库、借阅、归还等操作。本系统采用Java语言进行开发,充分体现了Java在企业级应用中的强大功能。以下是关于这个...

    java进销存java进销存java进销存java进销存

    Java进销存系统是基于Java技术开发的一种企业管理软件,主要用于管理企业的销售、采购以及库存等业务流程。在本文中,我们将深入探讨Java进销存系统的概念、架构、核心技术及其实现过程。 一、进销存系统概述 进销...

    SDE空间数据的检测

    这种方法相比当前广泛采用的技术手段,在速度、可靠性和自动化水平上都有显著提升,同时能够减轻数据服务器的压力,提高监测效率。 #### 关键词解析 - **ArcSDE数据库**:由ESRI公司提供的空间数据引擎,作为ArcGIS...

    基于java医药管理系统

    1. 数据库连接:Java通过JDBC(Java Database Connectivity)接口,实现与各种数据库(如MySQL、Oracle等)的无缝对接,进行数据的存取和操作。 2. 用户界面:Java Swing或JavaFX库用于构建用户友好的图形界面,...

    java库存查看系统

    使用Java SE(标准版)作为基础,结合Servlet和JSP技术,构建了系统的后端逻辑。Servlet负责处理HTTP请求,执行业务逻辑,而JSP用于生成动态HTML页面,展示数据。 2. **数据库设计与管理**:库存数据的存储通常需要...

    电信服务器操作日志分析入库

    这个过程中,可能需要用到编程语言(如Python或Java)编写脚本,或者利用专门的日志分析工具(如ELK Stack:Elasticsearch, Logstash, Kibana)。通过对日志数据的统计、可视化,可以发现服务器的使用模式,追踪异常...

    Java-仓库管理系统.zip

    Java仓库管理系统主要分为库存管理、入库出库管理、库存盘点、报表统计等多个模块,实现了从商品入库到出库的全程跟踪,确保库存数据的实时性和准确性。系统采用B/S架构,用户通过浏览器即可进行操作,降低了客户端...

    这是一个用于网上购物的一个系统,采用SSH+Oracle写的

    同时,还需要进行充分的测试,包括单元测试、集成测试和压力测试,确保系统的稳定性和可靠性。 综上所述,"SSH+Oracle网上购物系统"是一个集成了强大技术栈的电子商务平台,结合了高效的Web框架和数据库管理系统,...

    超市管理系统(java)

    【超市管理系统(Java)】是一个基于Java编程语言开发的软件应用,主要目的是为了高效地管理超市的日常运营,包括商品的入库、出库、库存管理、销售记录、会员管理、财务管理等多个方面。这个系统通常采用模块化设计...

    JAVA课程设计——图书管理系统

    - **数据库连接**:使用JDBC(Java Database Connectivity)接口与数据库进行交互,如MySQL、Oracle等,进行数据的读写操作。 3. **数据库设计**: - **表结构**:设计图书表、用户表、借阅记录表等,明确各字段...

    JAVA.进销存系统.毕业设计

    此外,性能测试和压力测试可以帮助优化系统,提高响应速度和并发处理能力。 总的来说,JAVA进销存系统毕业设计是一个全面了解和实践Java开发技能的项目,涵盖了数据库设计、前端开发、后端服务、业务逻辑和系统测试...

    仓库管理系统的设计与实现Java代码.zip

    在仓库管理系统中,通常会选择关系型数据库如MySQL或Oracle来存储大量结构化的库存信息,通过JDBC(Java Database Connectivity)接口进行数据交互。此外,还可以利用对象关系映射框架如Hibernate或MyBatis,简化...

Global site tag (gtag.js) - Google Analytics