`
cheerwong
  • 浏览: 13086 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

使用iBatis插入数据速度的测试

阅读更多
性能测试时遇到一个问题,独立的线程只负责数据入库,但测试发现数据入库速度比产生的慢,导致数据堆积,虚拟机内存使用完,于是做一个测试,看看到底入库的速度有多快。

测试关键代码:
private static void executeBatch() throws SQLException
{
    long beginTime = System.currentTimeMillis();
    sqlMapClient.startBatch();
    for (ActiveRecord activeRecord : activeRecordList)
    {
        sqlMapClient.insert("insert", activeRecord);
    }
    sqlMapClient.executeBatch();
    System.out.printf("%d records:executeBatch finished in %d milliseconds from the begining\r\n", activeRecordList.size(), System.currentTimeMillis() - beginTime);
}

private static void execute() throws SQLException
{
    long beginTime = System.currentTimeMillis();
    for (ActiveRecord activeRecord : activeRecordList)
    {
        sqlMapClient.insert("insert", activeRecord);
    }
    System.out.printf("%d records:execute finished in %d milliseconds from the begining\r\n", activeRecordList.size(), System.currentTimeMillis() - beginTime);
}


测试结果:
# java -classpath ./:ibatis/ibatis-2.3.4.726.jar:ibatis/ojdbc5.jar ibatis.ActiveRecordTest
1 records:execute finished in 30 milliseconds from the begining
1 records:executeBatch finished in 12 milliseconds from the begining
10 records:execute finished in 108 milliseconds from the begining
10 records:executeBatch finished in 111 milliseconds from the begining
100 records:execute finished in 935 milliseconds from the begining
100 records:executeBatch finished in 1184 milliseconds from the begining
1000 records:execute finished in 9695 milliseconds from the begining
1000 records:executeBatch finished in 9344 milliseconds from the begining
10000 records:execute finished in 95788 milliseconds from the begining
10000 records:executeBatch finished in 82613 milliseconds from the begining

结果分析:
从10000条记录插入耗时82613ms计算,大约每秒钟可入库120条记录,因为这个测试代码只做了这一件事,所以正式业务代码的效率还会比这个低,我们遇到的问题刚好是用户行为轨迹的业务,业务要求的TPS是90,相当于每秒钟最少产生90条记录,加上业务代码的逻辑,已经比较接近iBatis入库速度的上限。
建议:
如果入库的数据量接近或超过iBatis的上限,可以考虑将数据分批,多个线程占用单独的数据库连接进行入库。
分享到:
评论

相关推荐

    ibatis的批量插入DAO实例

    本篇将深入探讨如何在Ibatis中实现批量插入数据的DAO(Data Access Object)实例,以及相关的源码分析。 首先,Ibatis允许我们通过SQL映射文件来定义SQL语句,这种方式比传统的JDBC更加灵活且易于维护。批量插入...

    Ibatis测试demo

    本示例("Ibatis测试demo")旨在展示如何使用Ibatis进行基本的数据库操作,如查询、插入、更新和删除数据。 【描述】:虽然描述部分为空,但我们可以推测这是一个关于如何设置和测试Ibatis的教程。通常,这样的教程...

    java ibatis main测试

    下面我们将深入探讨如何在Java中使用iBatis进行主要测试。 首先,我们需要在项目中集成iBatis框架。这通常涉及以下几个步骤: 1. 添加依赖:在Maven或Gradle的配置文件中添加iBatis的依赖库。 2. 配置:创建`...

    ibatis的使用教程

    例如,使用 `sqlMapClient.queryForObject(id, parameter)` 执行查询,`sqlMapClient.insert(id, parameter)` 插入数据等。 **Ibatis API** Ibatis 提供了一些基本的API,如查询、添加、删除和修改方法。通常,会...

    nhibernate与ibatis速度对比测试项目

    在这个项目中,我们可以通过执行相同的业务逻辑,但分别使用NHibernate和iBatis作为数据访问层,对比它们处理相同数量请求的时间消耗,从而评估它们的性能差异。 测试可能包括以下几个方面: 1. **插入性能**:比较...

    ibatis3应用实例(oracle数据库)

    例如,`SqlSession.insert()`用于插入数据,`SqlSession.update()`用于更新,`SqlSession.delete()`用于删除,`SqlSession.selectOne()`或`SqlSession.selectList()`用于查询。 四、动态SQL Ibatis3的一个亮点是其...

    ibatis环境搭建教程

    在ibatis中,DAO的实现通常与具体的业务逻辑层分离,通过提供一组统一的数据访问接口,使得业务逻辑层可以透明地操作底层数据。 - **优点**: - 提高了代码的复用性和可测试性。 - 降低了业务逻辑与数据访问之间...

    ibatis源码

    在iBatis源码中,可以看到许多测试类,这些测试类通常模拟了数据库操作,通过调用SqlSession的方法,验证SQL的执行效果,包括查询、插入、更新和删除等操作。同时,junit测试也可以用来检验映射文件(XML或注解)的...

    ibatis出错调试心得

    在使用iBatis进行数据库操作的过程中,可能会遇到各种各样的问题。这些问题往往由于iBatis错误信息的隐晦性而难以快速定位与解决。本文将根据所提供的标题、描述及部分内容,详细阐述在使用iBatis时可能遇到的一些...

    springMVC和ibatis实现sql2005数据库插入案例

    - 在实现类中注入Mapper,调用其insert方法插入数据。 7. **Controller层** - 创建UserController,定义处理HTTP请求的方法,如`@RequestMapping("add") public String addUser(@ModelAttribute User user) {...}...

    ibatis小例子Demo

    6. **测试**:通过JUnit或其他测试框架编写测试用例,验证Ibatis的功能是否正常工作。 通过这个Demo,初学者可以逐步了解Ibatis的工作原理,掌握如何将SQL语句与Java代码相结合,以及如何处理数据库操作的各种场景...

    ibatis资料(官方文档)

    - `<insert>`:用于插入数据,支持动态SQL和自动生成主键。 - `<update>`:更新数据,同样支持动态SQL。 - `<delete>`:删除数据,动态SQL也是其特性之一。 **3. 参数映射** 在SQL映射文件中,使用`<parameterMap>`...

    iBatis资料 语法

    通过这个例子,你可以了解到iBatis的基本用法,包括插入、查询、更新和删除数据。 `ibatis 延迟加载、对多关系、缓存的测试.mht`涉及到iBatis的高级特性。延迟加载(Lazy Loading)是iBatis的一种优化策略,只在...

    Ibatis简单案例

    9. **测试**:Ibatis_test可能包含测试类,展示了如何使用JUnit或其他测试框架对Ibatis的查询和插入操作进行单元测试。 这个简单的Ibatis案例对于初学者来说是一个很好的起点,它将帮助理解Ibatis的基本工作原理,...

    iBATIS 模板

    iBATIS,全称为“Java SQL Mapping Framework”,是一款在Java应用程序中进行数据库操作的开源框架..."iBATIS test"这个文件可能是用于测试iBATIS模板配置和功能的示例,你可以通过分析和运行它来加深对iBATIS的理解。

    iBATIS实战

    5.2 插入数据 84 5.2.1 使用内联参数映射 84 5.2.2 使用外部参数映射 85 5.2.3 自动生成的键 86 5.3 更新和删除数据 88 5.3.1 处理并发更新 88 5.3.2 更新或删除子记录 89 5.4 运行批量更新 90 5.5 使用存储过程 91 ...

    ibatis快速入门

    这个示例可能会展示如何在Flex应用中使用Ibatis作为数据访问层,以及如何通过AMF(Action Message Format)进行数据传输。 学习Ibatis的过程中,你需要理解以下几个关键点: 1. 配置:包括SqlSessionFactoryBuilder...

    ibatis-2.3.0.677

    此外,源码中还包含了丰富的测试用例,这些用例不仅验证了iBatis的功能,也为我们提供了实际应用中的使用示例,对于快速上手和调试都非常有帮助。 总之,通过对iBatis 2.3.0.677源码的分析,我们可以掌握其设计理念...

Global site tag (gtag.js) - Google Analytics