由CSDN密码泄露 窥视各大数据库性能

          很多同学一直抱怨手头没有一个真实的数据库,无法进行数据库性能试验,CSDN得知了同学们的苦恼,立刻开放了部分数据库,供同学们学习、参考,对CSDN这种大公无私、舍己为人的行为,有关部门对此进行了高度的赞扬,下面就带领同学们来进行一个小小的性能对比测试。

  实验选择了三个数据库:Oracle11g、MySQL5.1以及DM7。Oracle作为商业数据库大哥大的代表,MySQL作为开源数据库的代表,DM7很多同学估计就不清楚了(达梦数据库),暂时作为国产数据库的代表吧。

  测试环境

  

  导入数据库性能测试

  这次CSDN泄漏的密码库规模说大不大,说小不小,600多万行(CSDN的用户数霸气外漏,博客园有多少呢?),同学们测试的福音啊。还好我第一时间download了,CSDN的处理还是比较迅速的,很快网上的下载链接就失效了,赞一个。这个密码库是一个文本文件,200多M,用UE打开还要等一会...每行的格式如下:

  用户名 # 密码 # 邮箱

  三个字段间的间隔是’空格#空格’,为了方便导入数据库,我们使用UE将其分割符全部替换为#。

  肿么导入数据库呢?上面选的三个数据库都具有快速导入的工具,Oralce提供了sqlldr工具,MySQL提供了load data命令,DM7提供了dmfldr工具,dmfldr和sqlldr工具感觉使用起来比较相似,MySQL提供的load data作为一种SQL命令。

  建表

  导入之前我们需要创建一个空表,Oracle和DM7的建表语句如下:

  CREATETABLE CSDN(ID VARCHAR(256), PWD VARCHAR(256), EMAIL VARCHAR(256));

  MySQL的建表语句我们指定存储引擎为INNODB:

  CREATETABLE CSDN(ID VARCHAR(256), PWD VARCHAR(256), EMAIL VARCHAR(256)) ENGINE=INNODB;

  初始建表语句这里不指定任何索引。

  装载数据

  ORACLE

  首先创建控制文件ora_csdn.ctrl,内容如下:

UNRECOVERABLE
LOADDATA INFILE 'D:CSDNwww.csdn.net.sql'
INSERT into table CSDN
fields terminated by '#'
(
ID,
PWD,
EMAIL
)

   

  然后使用sqlldr工具:

sqlldr userid=SYSMAN/SYSDBA control=D:/CSDN/ora_csdn.ctrl DIRECT=TRUE log=resulthis.out

  输出文件为resulthis.out:

SQL*Loader: Release 11.1.0.6.0- Production on 星期六 12月 2416:01:062011  
Copyright (c) 1982, 2007, Oracle.  All rights reserved.  
控制文件:      D:/CSDN/ora_csdn.ctrl
数据文件:      D:CSDNwww.csdn.net.sql   错误文件:    D:/CSDN/www.csdn.net.bad  
废弃文件:    未作指定    
(可废弃所有记录)  
要加载的数: ALL
要跳过的数: 0
允许的错误: 50
继续:    未作指定
所用路径:       直接    
加载是 UNRECOVERABLE;产生无效的恢复操作。  
表 CSDN,已加载从每个逻辑记录
插入选项对此表 INSERT 生效      
列名                        位置      长度  中止 包装数据类型 ------------------------------ ---------- ----- ---- ---- ---------------------
ID                                  FIRST     *   #       CHARACTER            
PWD                                  NEXT     *   #       CHARACTER            
EMAIL                                NEXT     *   #       CHARACTER                
表 CSDN:  
6428632 行 加载成功。  
由于数据错误, 0 行 没有加载。  
由于所有 WHEN 子句失败, 0 行 没有加载。  
由于所有字段都为空的, 0 行 没有加载。  
在直接路径中没有使用绑定数组大小。
列数组  行数:    5000
流缓冲区字节数:  256000
读取   缓冲区字节数: 1048576  
跳过的逻辑记录总数:          0
读取的逻辑记录总数:       6428632
拒绝的逻辑记录总数:          0
废弃的逻辑记录总数:        0
由 SQL*Loader 主线程加载的流缓冲区总数:     1497
由 SQL*Loader 加载线程加载的流缓冲区总数:        0  
从 星期六 12月 2416:01:062011 开始运行
在 星期六 12月 2416:01:132011 处运行结束  
经过时间为: 00: 00: 06.93CPU 时间为: 00: 00: 04.65

  从输出文件可以看出时间为00:00:06.93,将近每秒钟100W行的导入效率,很不错。

  MySQL

  MySQL导入比较简单,不需要CTRL文件,直接在mysql命令行执行即可。

mysql> LOAD DATA local infile "D:/CSDN/www.csdn.net.sql" into table CSDN fields
terminated by '#';
Query OK, 6428632 rows affected, 14275 warnings (1 min 51.95 sec)
Records: 6428632  Deleted: 0  Skipped: 0  Warnings: 14275

  从打印信息,可以看出,耗时接近2分钟,性能较差。

  DM7

  DM7提供了dmfldr.exe工具,需要ctrl文件,用法和oracle基本类似,有些细微的差别,比如指定输出导入到输出文件,还是会在CMD中打印信息。

D:SRCDM7Release>dmfldr.exe USERID=SYSDBA/SYSDBA CONTROL='D:/CSDN/dm_csdn.ctrl
' DIRECT=TRUE  LOG='OUT.LOG'

  输出文件为OUT.LOG:

dmfldr:    
Copyright (c) 2011, 2015, Dameng.  All rights reserved.  
控制文件:D:/CSDN/dm_csdn.ctrl  
加载行数:全部  
每次提交服务器行数:50000  
跳过行数:0  
允许错误数:100  
是否直接加载:是  
是否插入自增列:否  
数据是否已按照聚集索引排序:否  
字符集:GBK    
数据文件共1个: D:CSDNwww.csdn.net.sql  
错误文件:fldr.bad  
目标表:CSDN  
列名                                                                                                                            终止    包装数据类型        
ID                                                                                                                               WHT      CHARACTER            
PWD                                                                                                                              WHT      CHARACTER            
EMAIL                                                                                                                            WHT      CHARACTER              
目标表 CSDN :
6428632行 加载成功。
由于数据格式错误,0行 丢弃。
由于数据错误,0行 没有加载。  
跳过的逻辑记录总数:0
读取的逻辑记录总数:6428632
拒绝的逻辑记录总数:0  
用时:15238.166(ms)

  查看输出文件,用时15s,比MySQL好很多,比Oralce差一点。


来源:IT168 作者:

免责声明:本文仅代表作者个人观点,与世界朋友网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

[责任编辑:世界朋友]