性能测试时遇到一个问题,独立的线程只负责数据入库,但测试发现数据入库速度比产生的慢,导致数据堆积,虚拟机内存使用完,于是做一个测试,看看到底入库的速度有多快。
测试关键代码:
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(Data Access Object)实例,以及相关的源码分析。 首先,Ibatis允许我们通过SQL映射文件来定义SQL语句,这种方式比传统的JDBC更加灵活且易于维护。批量插入...
本示例("Ibatis测试demo")旨在展示如何使用Ibatis进行基本的数据库操作,如查询、插入、更新和删除数据。 【描述】:虽然描述部分为空,但我们可以推测这是一个关于如何设置和测试Ibatis的教程。通常,这样的教程...
下面我们将深入探讨如何在Java中使用iBatis进行主要测试。 首先,我们需要在项目中集成iBatis框架。这通常涉及以下几个步骤: 1. 添加依赖:在Maven或Gradle的配置文件中添加iBatis的依赖库。 2. 配置:创建`...
例如,使用 `sqlMapClient.queryForObject(id, parameter)` 执行查询,`sqlMapClient.insert(id, parameter)` 插入数据等。 **Ibatis API** Ibatis 提供了一些基本的API,如查询、添加、删除和修改方法。通常,会...
在这个项目中,我们可以通过执行相同的业务逻辑,但分别使用NHibernate和iBatis作为数据访问层,对比它们处理相同数量请求的时间消耗,从而评估它们的性能差异。 测试可能包括以下几个方面: 1. **插入性能**:比较...
例如,`SqlSession.insert()`用于插入数据,`SqlSession.update()`用于更新,`SqlSession.delete()`用于删除,`SqlSession.selectOne()`或`SqlSession.selectList()`用于查询。 四、动态SQL Ibatis3的一个亮点是其...
在ibatis中,DAO的实现通常与具体的业务逻辑层分离,通过提供一组统一的数据访问接口,使得业务逻辑层可以透明地操作底层数据。 - **优点**: - 提高了代码的复用性和可测试性。 - 降低了业务逻辑与数据访问之间...
在iBatis源码中,可以看到许多测试类,这些测试类通常模拟了数据库操作,通过调用SqlSession的方法,验证SQL的执行效果,包括查询、插入、更新和删除等操作。同时,junit测试也可以用来检验映射文件(XML或注解)的...
在使用iBatis进行数据库操作的过程中,可能会遇到各种各样的问题。这些问题往往由于iBatis错误信息的隐晦性而难以快速定位与解决。本文将根据所提供的标题、描述及部分内容,详细阐述在使用iBatis时可能遇到的一些...
- 在实现类中注入Mapper,调用其insert方法插入数据。 7. **Controller层** - 创建UserController,定义处理HTTP请求的方法,如`@RequestMapping("add") public String addUser(@ModelAttribute User user) {...}...
6. **测试**:通过JUnit或其他测试框架编写测试用例,验证Ibatis的功能是否正常工作。 通过这个Demo,初学者可以逐步了解Ibatis的工作原理,掌握如何将SQL语句与Java代码相结合,以及如何处理数据库操作的各种场景...
- `<insert>`:用于插入数据,支持动态SQL和自动生成主键。 - `<update>`:更新数据,同样支持动态SQL。 - `<delete>`:删除数据,动态SQL也是其特性之一。 **3. 参数映射** 在SQL映射文件中,使用`<parameterMap>`...
通过这个例子,你可以了解到iBatis的基本用法,包括插入、查询、更新和删除数据。 `ibatis 延迟加载、对多关系、缓存的测试.mht`涉及到iBatis的高级特性。延迟加载(Lazy Loading)是iBatis的一种优化策略,只在...
9. **测试**:Ibatis_test可能包含测试类,展示了如何使用JUnit或其他测试框架对Ibatis的查询和插入操作进行单元测试。 这个简单的Ibatis案例对于初学者来说是一个很好的起点,它将帮助理解Ibatis的基本工作原理,...
iBATIS,全称为“Java SQL Mapping Framework”,是一款在Java应用程序中进行数据库操作的开源框架..."iBATIS test"这个文件可能是用于测试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 ...
这个示例可能会展示如何在Flex应用中使用Ibatis作为数据访问层,以及如何通过AMF(Action Message Format)进行数据传输。 学习Ibatis的过程中,你需要理解以下几个关键点: 1. 配置:包括SqlSessionFactoryBuilder...
此外,源码中还包含了丰富的测试用例,这些用例不仅验证了iBatis的功能,也为我们提供了实际应用中的使用示例,对于快速上手和调试都非常有帮助。 总之,通过对iBatis 2.3.0.677源码的分析,我们可以掌握其设计理念...