一、为什么只能用JDBC来访问数据库????
大部分应用是JAVA写的,JDBC是是一种用于执行SQL语句的Java API,通过JDBC提供的类和接口进行对数据库的访问。
二、测试Oracle和MySQL的JDBC读取性能
观点: 数据库(Oracle和MySQL)的JDBC读取性能非常非常差!比文本文件还要差5倍以上。而采用二进制数据时,会比文本再提高3倍的读取性能。也就是说,合理格式的二进制文件会比数据库有15倍以上的优势。再考虑到并行因素,比数据库快出几十上百倍也是完全可能的。 论述: 1)环境:在一台Intel服务器上完成测试,2个Intel2670 CPU,主频2.6G,共16核,内存64G。数据库表数据及文本文件均存储在同一块SSD硬盘上。所有测试均在服务器本机上完成,没有消耗网络传输时间。 2)数据:使用customer表来做测试,数据记录为3000万行,8个字段。它生成的原始文本文件名为customer.tbl,文件大小为4.9G。利用数据库提供的数据导入工具将此文件数据导入到Oracle和MySQL的数据表中。
1、数据库读数测试
通过Oracle提供的JDBC接口,用SQL语句执行数据读取。通过MySQL提供的JDBC接口,用SQL语句执行数据读取。  第二次可能由于操作系统有了硬盘缓存,所以更快。因为我们主要是为了测试JDBC的读取时间,所以就以第二次为准,减少数据库本身从硬盘读数的影响。每秒读出行数也是按第二次时间来计算的,也就是说,Oracle每秒能读出10万行多数据,MySQL大概接近8万行。当然这个值和表的字段数及类型都有关(customer表有8个字段),只是一种参考。
2、文本文件读取测试
虽然文本文件需要解析,从文本文件读取数据还是远远快于从数据库中读数。Oracle和MySQL的IO实在是太慢了
3、二进制读取测试
使用二进制方式的存储格式的表。因为二进制数据不再需要解析,可以直接产生对象,计算量少了很多,因而要更快。
4、并行测试
从文件中取数还很容易实现并行,文本和组表都容易写出并行程序。用SPL很容易实现数据分段和并行计算。?????与串行相比,接近了线性提升,将CPU的多核充分利用起来了。 应用:所以在关注性能且数据量较大时,不要把数据读出数据库再计算;如果非要先读取再计算,可以用文本存储都比数据库强,用二进制当然更好(推荐使用SPL组表)。就不要再用数据库存储了(大数据都是历史,基本也不再改了,可以事先读出)。
|