C++与Java的数据库操作比较
2018-12-08许石昌
◆邵 岚 许石昌 吕 健
C++与Java的数据库操作比较
◆邵 岚 许石昌 吕 健
(CLO 北京 100000)
数据库的操作速度是相关产品性能的主要衡量指标,不同语言对数据库的操作速度也不尽相同。本文通过对C++和Java两种语言对数据库的不同操作,编写测试用例,执行DQL(数据库查询语言)和DML(数据库操纵语言)语句访问ORACLE数据库,通过对比执行效率来分析两种语言的优劣,进而指导我们对编程语言的选择。
性能测试;编程语言;SQL语句
0 引言
随着计算机技术不断发展,各种编程语言也随着发展,使当今的大多数程序开发人员可以摆脱枯燥无味的计算机指令或汇编语言开发软件,而是利用一系列高效的、面向对象的语言去开发软件,从而达到事半功倍的效果,C++和Java是如今使用最多、最为流行的两种编程语言,本文使用两种语言进行程序开发,编写测试用例,执行DQL(数据库查询语言)和DML(数据库操纵语言)语句访问ORACLE数据库,通过对比执行效率来分析两种语言的优劣,进而指导我们对于编程语言的选择。
1 简介
1.1 Java语言
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。
1.2 C++语言
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。
C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:封装,抽象,继续,多态。标准的 C++ 由三个重要部分组成:核心语言,提供了所有构件块,包括变量、数据类型和常量等;C++ 标准库,提供了大量的函数,用于操作文件、字符串等;标准模板库(STL),提供了大量的方法,用于操作数据结构等。
2 测试环境
(1)硬件环境
CPU型号:Intel(R) Xeon(R) CPU E7-4820 v2 @ 2.00GHz
服务器配置:4*8core
内存大小:256G
(2)软件环境
数据库软件:Oracle 11.2.0.4 版本集群数据库软件
操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago)
Java:ojdbc6.jar(Oracle的官方驱动)、JDK版本1.8.0_181
C++: glibc版本2.12-1.132.el6.x86_64
(3)测试内容
本文使用Java和C++语言进行程序开发,编写测试用例,执行DQL(数据库查询语言)和DML(数据库操纵语言)语句访问ORACLE数据库,通过对比执行效率来分析两种语言的优劣,进而指导我们对于编程语言的选择。
3 测试数据
我们的测试就是使用Oracle11g的数据库连接池Connection Pool而进行的,具体操作是在Linux操作系统层面通过主线程创建多个子线程,并且由各个子线程分别连接数据库,然后对数据库进行插入、删除、更新和查询等操作,操作完成后关闭连接。线程数为10个,数据库表在每个线程上的SerialID不同。
以下所有测试过程,C++程序与Java程序都执行相同的数据库操作。
3.1 Insert测试
测试说明:
(1)清空数据库表。
(2)对数据库表进行插入操作,其表的DetailID字段顺序增长,其余字段固定不变。插入的条目数量分别为1万条,10万条,50万条和100万条。
(3)每插入一次数据,进行一次Commit操作。
测试结果如表1、图1所示。
表1 Insert测试结果 单位:毫秒
图1 Insert测试结果
结论:
(1)C++语言对于数据库Insert操作效率整体略优于Java语言。
(2)随着Insert的数据量增长,两种语言程序的执行时间也基本呈线性增长。
3.2 Select测试
测试说明:
(1)数据库表中的记录为1000000条。
(2)对数据库表进行查询操作,其表的SerialID字段和DetailID字段做为查询条件,且为主键。查询的数量分别为1000条,1万条,10万条和50万条。查询结果为部分成功。
测试结果如表2、图2所示。
表2 Select测试结果 单位:毫秒
图2 Select测试结果
结论:
(1)C++语言对于数据库Select操作在查询数据较小时,优于Java语言,在大数据量访问时,两种语言性能相当。
(2)随着Select的数据量线性增长,Java语言时间增长优于线性增长。
3.3 Update测试
测试说明:
(1)数据库表中的记录为1000000条。
(2)对数据库表进行更新操作,表的TotalMoney字段为传入参数,SerialID字段和DetailID字段为更新条件,且为主键。更新的条目数量分别为1000条,1万条,10万条和50万条。
(3)每更新一次数据,进行一次Commit操作。
测试结果如表3、图3所示。
表3 Update测试结果 单位:毫秒
图3 Update测试结果
结论:
(1)对于数据库Update操作,C++语言性能与Java语言相当。
(2)随着Update的数据量增长,两种语言程序的执行时间也基本呈线性增长。
3.4 Delete测试
测试说明:
(1)数据库表中的记录为1000000条。
(2)对数据库表进行删除操作,表的SerialID字段和DetailID字段为删除条件,且为主键。删除的条目数量分别为1000条,1万条,5万条和10万条。
(3)每插入一次数据,进行一次Commit操作。
测试结果如表4、图4所示。
表4 Delete测试结果 单位:毫秒
图4 Delete测试结果
结论:
(1)对于数据库Delete操作,C++语言性能优于Java语言。
(2)随着Delete的数据量增长,两种语言程序的执行时间也基本呈线性增长。
3.5 全业务测试
测试说明:
(1)清空数据库表。
(2)对数据库表进行查询、插入、更新操作。其中查询和更新对应一个相同的表,而插入对应另一个不同的表。测试的条目数量分别为1000条,10000条,50000条和100000条。
(3)每进行一次查询、插入、更新操作,执行一次Commit操作。
测试结果如表5、图5所示。
表5 全业务测试结果 单位:毫秒
图5 全业务测试结果
结论:
(1)对于数据库全业务操作,C++语言性能优于Java语言。
(2)随着操作的数据量增长,两种语言程序的执行时间也基本呈线性增长。
4 结论
在本文环境下,我们分别对数据库的不同操作进行了测试,包括插入操作,查询操作,更新操作,删除操作和全业务操作(查询,插入和更新,其中查询和更新对应同一个表,插入对应另一个表);其中插入、更新、删除和全业务测试使用多线程技术作了循环Commit(每个数据库条目操作提交一次)测试,
从测试数据中,可以看出C++语言在对相对较少的数据操作时,通常在10000条数据以内,都具有明显效率优势。随着数据库操作数量的增长,两种语言的效率逐渐趋于相同,在数据库操作数量很大时,Java对数据库的操作效率甚至会超越C++语言。但是在全业务操作上,C++的效率几乎是Java的两倍。
性能:通过不同操作的多种组合测试,我们发现对于单个批量操作的循环提交,Java明显不如C++,在全业务的批量操作循环提交中,C++更是达到了Java 的两倍。
易用性:Java使用的人最多,且网上文档多,操作方便,C++用起来比较麻烦点。
前途:目前的实际业务操作中,全业务操作和循环提交是更为经常使用的,因此C++在Oracle数据库的实际使用效率上更胜一筹。
注:当使用不同的硬件环境和软件环境进行测试时,测试结果会有所不同。