Oracle与集算器对比测试报告(续)

7.多表连接

7.1.算法说明

输入:

本测试采用一组宽表和一组窄表来作为输入,宽表组和窄表组只是字段不同,参加运算的字段和算法都一样。

宽表组:数据t表(或者文件)是事实表,共100个字段,6900万行,占硬盘80GDiDj表示维表,都是100列,1000万行,占硬盘10G

窄表组:数据t表(或者文件)是事实表,共10个字段,11亿行,占硬盘80GDiDj表示维表,都是100列,1000万行,占硬盘10G

其中:

t表选出字段为sum(t11)sum(t12)di选出字段为sum(di11)dj选出字段为sum(dj11)

dj表与dj表连接是左连接:di.di23=dj.dj23

di分组字段为di31dj分组字段为dj31

计算:

计算分为三种:

t*di

t表与di表连接左连接:t.t21=di.di21

连接之后按照di31分组求sum

t*di*dj

t表与di表连接左连接:t.t21=di.di21

t表与dj表连接是左连接:t.t22=dj.dj22

连接之后按照di31dj31分组求sum

t*(di*dj)

t表与di表连接左连接:t.t21=di.di21

di表与dj表连接是左连接:di.di23=dj.dj23

连接之后按照di31dj31分组求sum

输出:

连接、分组求和之后的结果。

说明:

宽表组表字段多,所以采用集算器列存二进制文件的方式是有意义的。窄表组表字段较少,因此不采用集算器二进制列存的方式,对比Oracle、集算器文本、集算器行存和集算器行存分段四个测试对象。

 

7.2.Oracle sql示例

t*di:

Select sum(t.t11),sum(t.t12),sum(di.di11)

from t left join di on di21=t.t21

group by di.di31

 

t*di*dj:

Select sum(t.t11),sum(t.t12),sum(di.di11),sum(dj.dj11)

from t left join di on di.di21=t.t21 left join dj on dj.dj22=t.t22

group by di.di31,dj.dj31

 

t*(di*dj):

Select sum(t.t11),sum(t.t12),sum(di.di11),sum(dj.dj11)

from t left join dion di.di21=t.t21 left join dj on dj.dj23=di.di23

group by dj.dj31

7.3.集算器脚本示例

 main.dfx


 

joinsub.dfx


 

 joinsubb.dfx


 

7.4.测试结果和分析

7.4.1 宽表组并行数1(无并行


 

算法

Oracle

集算器
(文本)

集算器
(行存)

集算器
(列存)

T*D

435

543

340

131

T*D*D

549

612

382

185

T*(D*D)

500

553

340

137

 

结果分析:

1、测试对象之间对比,由于列式存储对性能提高明显,所以集算器列存计算时间最短性能最高;其他三个测试对象因为是行式存储所以性能较低;由于事实表和维表之间存在外键关系,因此集算器行存可以采用较快的switch方法来实现jion,所以比oracle稍快。

 

7.4.2宽表组并行数4



 

算法

Oracle

集算器
(文本)

集算器
(行存)

集算器
(列存)

T*D

421

338

325

55

T*D*D

595

358

325

72

T*(D*D)

416

348

332

64

 

结果分析:

1、测试对象之间对比,由于列式存储对性能提高明显,所以集算器列存计算时间最短性能最高;其他三个测试对象因为是行式存储所以性能较低;由于事实表和维表之间存在外键关系,因此集算器行存可以采用较快的switch方法来实现jion,所以比oracle稍快。集算器文本采用4个节点同时并行计算,所以超过了oracle的性能。

 

7.4.3窄表组并行数1(无并行)

 

 

算法

Oracle

集算器
(文本)

集算器
(行存)

集算器
(行存分段)

T*D

508

1824

1415

1330

T*D*D

4846

2920

2540

2355

T*(D*D)

3684

2142

1663

1479

性能排名:

算法

1

2

3

4

T*D

Oracle

集算器
(行存)

集算器
(行存分段)

集算器
(文本)

T*D*D

集算器
(行存分段)

集算器
(行存)

集算器
(文本)

Oracle

T*(D*D)

集算器
(行存分段)

集算器
(行存)

集算器
(文本)

Oracle

结果分析:

1T*D算法而言,oracle性能具备明显的优势。

2、其他两种算法,集算器的计算步骤是人为决定的。由于事先知道事实表和维表之间的外键关系,并且知道表大小差异,可以采用最快的switch方法来计算。而oracle采用自动优化的方式,不够灵活,所以较慢。

 

7.4.4 窄表组并行数4

 

 

算法

Oracle

集算器
(文本)

集算器
(行存)

集算器
(行存分段)

T*D

1676

462

537

353

T*D*D

4527

788

743

641

T*(D*D)

3298

531

576

420

 

结果分析:

1、集算器的计算步骤是人为决定的。由于事先知道事实表和维表之间的外键关系,并且知道表大小差异,可以采用最快的switch方法来计算。而oracle采用自动优化的方式,不够灵活,所以较慢。

 

7.5.进一步的对比分析

以窄表组的T*(D*D)的测试数据来横向对比一下,不同并发数量对计算性能的影响。



 

并行数

Oracle

集算器
(文本)

集算器
(行存)

集算器
(行存分段)

1并行

3684

2142

1663

1479

4并行

3298

531

576

420

 

结果分析:并行计算对集算器性能提高明显,Oracle则不明显。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值