Oracle与集算器对比测试报告

1.  测试目的

针对相同的硬件环境和计算任务,对比Oracle和集算器的性能差异,为客户选型提供参考。

2.  硬件环境

设备数量:1

CPU16 Intel(R) Xeon(R) CPU E5620  @ 2.40GHz

内存:20G

3. 软件环境

操作系统:CentOS6.4 64

JDK1.6 64

4.  测试对象

Oracle11g(64位),本文中简称为Oracle

集算器:v3.1。集算器按照数据存储方式的不同分为“文本文件、行式二进制文件(不分段文件)、行式二进制(分段文件)和列式二进制文件”四种不同测试对象,本文中简称为集算器文本、集算器行存、集算器行存分段、集算器列存。

5.   方案说明

对比的相同点:

1、Oracle和集算器运行于相同的硬件和操作系统之上,执行任务的时候没有其他负载的干扰。

2、执行的任务输入数据、算法和输出数据均相同。

3、对外提供调用接口相同,都是JDBC调用,返回结果集。

对比的不同点:

1、存储方式不同,Oracle是内部存储数据,对外表现为数据表;集算器是利用操作系统存储数据,表现为操作系统本地文件,具体的又有文本文件、行式二进制文件和列式二进制文件三种。

2、算法实现的方式不同,Oracle是以sql的方式来实现算法的;集算器是以网格程序脚本来实现算法。

 

6.   分组汇总

6.1.算法说明

输入:采用一个宽表A和一个窄表B来作为输入。A表有100个字段,6900万行记录,占用硬盘空间80GB 表有10个字段,11亿行记录,占用硬盘空间80G

计算:针对表每张表中的14个字符串类型的字段(g1g2g3g4)做分组,对14个数值型的字段(n1n2n3n4)做汇总sum计算。

输出:g1g2g3g4sum(n1)sum(n2)sum(n3)sum(n4)组成的结果表C

说明A表字段多,所以采用集算器列存二进制文件的方式是有意义的。B表字段较少,因此不采用集算器二进制列存的方式,仅对比Oracle、集算器文本和集算器行存(二进制)三个测试对象。

6.2. Oracle sql示例

A表查询sql4个分组字段4个汇总字段)

Select g1,g2,g3,g4,sum(n1),sum(n2),sum(n3),sum(n4) from A group by g1,g2,g3,g4

B表查询sql4个分组字段4个汇总字段)

Select g1,g2,g3,g4,sum(n1),sum(n2),sum(n3),sum(n4) from B group by g1,g2,g3,g4

 

6.3.  集算器 脚本示例

主程序(1个分组字段一个汇总字段部分)


Oracle与集算器对比测试报告
 

子程序groupsub.dfx

Oracle与集算器对比测试报告

子程序groupsubb.dfx

Oracle与集算器对比测试报告
  

子程序groupsubc.dfx

Oracle与集算器对比测试报告
 
6.4.  测试结果及分析

6.4.1A表(宽表)并行数为1(无并行)

统计计算所用时间,单位:秒。


Oracle与集算器对比测试报告
 

算法

Oracle

集算器
(文本)

集算器
(行存)

集算器
(列存)

结果行数

1分组1汇总

232

402

295

42

34

1分组4汇总

248

435

296

62

34

4分组1汇总

263

461

290

101

1464

4分组4汇总

285

502

313

121

1464

 

分析:

1、由于列式存储对性能提高明显,所以集算器列存计算时间最短性能最高;Oracle因为是行式存储所以性能次之;因为是单进程没有并发的情况,所以集算器行存和集算器文本性能较低,两者之中集算器行存是二进制所以比集算器文本要快。

2、在每个测试对象内部对比,一般来说算法越复杂计算时间越长,因此1分组1汇总计算最快,4分组4汇总最慢。

 

6.4.2.   A表(宽表)并行数为4

 

统计计算所用时间,单位:秒。


Oracle与集算器对比测试报告
 

算法

Oracle

集算器
(文本)

集算器
(行存)

集算器
(列存)

结果行数

1分组1汇总

259

274

295

43

34

1分组4汇总

272

275

297

56

34

4分组1汇总

286

264

315

99

1464

4分组4汇总

294

265

314

113

1464

 

结果分析:列式存储对性能提高的作用较大。

 

6.4.3 B表(窄表)并行数为1(无并行)

 

统计计算所用时间,单位:秒。


Oracle与集算器对比测试报告
 

算法

Oracle

集算器
(文本)

集算器
(行存)

集算器
(行存分段)

1分组1汇总

456

630

538

296

1分组4汇总

637

933

694

446

4分组1汇总

1139

1170

888

714

4分组4汇总

1246

1537

1080

936

 

 

6.4.4 B表(窄表)并行数为4

 

统计计算所用时间,单位:秒。


Oracle与集算器对比测试报告
 

算法

Oracle

集算器
(文本)

集算器
(行存)

集算器
(行存分段)

1分组1汇总

482

175

383

155

1分组4汇总

664

258

478

155

4分组1汇总

965

314

650

197

4分组4汇总

974

393

729

235

 

6.4.5 B表(窄表)并行数为8

 

统计计算所用时间,单位:秒。


Oracle与集算器对比测试报告
 

算法

Oracle

集算器
(文本)

集算器
(行存)

集算器
(行存分段)

1分组1汇总

486

183

436

159

1分组4汇总

675

161

537

176

4分组1汇总

976

191

681

162

4分组4汇总

968

220

761

169

 

6.5.  进一步的对比分析

 

6.5.1并发数量对A表(宽表)计算性能的影响

 

这里以A表(宽表)的4分组4汇总的测试数据来横向对比一下,不同并发数量对计算性能的影响。


Oracle与集算器对比测试报告
 

并行数

Oracle

集算器
(文本)

集算器
(行存)

集算器
(列存)

结果行数

1并行

285

502

313

121

1464

4并行

294

265

314

113

1464

 

分析:并行计算对集算器文本性能提高明显,其他测试对象不明显。原因在于集算器文本是分段多游标读取数据的,集算器行存和列存都是单个二进制文件,无法多游标分段读取。如果事先将文件分段保存成多个,就可以用分段多游标读取可以提升速度。Oracle并行速度提高不明显的原因应该是内部机制造成。

 

6.5.2 并发数量对B表(窄表)计算性能的影响

这里以B表(窄表)的4分组4汇总的测试数据来横向对比一下,不同并发数量对计算性能的影响。


Oracle与集算器对比测试报告
 
 

并行数

Oracle

集算器
(文本)

集算器
(行存)

集算器
(行存分段)

1并行

1246

1537

1080

936

4并行

974

393

729

235

8并行

968

220

761

169

 

结果分析:并行计算对集算器行存分段和集算器文本性能提高明显,其他测试对象不明显。原因在于集算器行存分段和集算器文本是分段多游标读取数据的,集算器行存是单个二进制文件,无法多游标分段读取。集算器行存分段是事先将文件分段保存成多个,就可以用分段多游标读取可以提升速度。Oracle并行速度提高不明显的原因应该是内部机制造成。