1. 测试目的
针对相同的硬件环境和计算任务,对比 Oracle 和集算器的性能差异,为客户选型提供参考。
2. 硬件环境
设备数量:1 台
CPU :16 核 Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
内存:20G
3. 软件环境
操作系统: CentOS6.4 64 位
JDK : 1.6 64 位
4. 测试对象
Oracle : 11g(64 位),本文中简称为 Oracle 。
集算器:v3.1。集算器按照数据存储方式的不同分为“文本文件、行式二进制文件(不分段文件)、行式二进制(分段文件)和列式二进制文件”四种不同测试对象,本文中简称为集算器文本、集算器行存、集算器行存分段、集算器列存。
5. 方案说明
对比的相同点:
1、 Oracle 和集算器运行于相同的硬件和操作系统之上,执行任务的时候没有其他负载的干扰。
2、 执行的任务输入数据、算法和输出数据均相同。
3、 对外提供调用接口相同,都是 JDBC 调用,返回结果集。
对比的不同点:
1、 存储方式不同, Oracle 是内部存储数据,对外表现为数据表;集算器是利用操作系统存储数据,表现为操作系统本地文件,具体的又有文本文件、行式二进制文件和列式二进制文件三种。
2、 算法实现的方式不同, Oracle 是以 sql 的方式来实现算法的;集算器是以网格程序脚本来实现算法。
6. 分组汇总
6.1. 算法说明
输入: 采用一个宽表 A 和一个窄表 B 来作为输入。 A 表有 100 个字段, 6900 万行记录,占用硬盘空间 80G 。 B 表有 10 个字段, 11 亿行记录,占用硬盘空间 80G 。
计算: 针对表每张表中的 1 到 4 个字符串类型的字段( g1 、 g2 、 g3 、 g4 )做分组,对 1 到 4 个数值型的字段( n1 、 n2 、 n3 、 n4 )做汇总 sum 计算。
输出: 由 g1 、 g2 、 g3 、 g4 和 sum(n1) 、 sum(n2) 、 sum(n3) 、 sum(n4) 组成的结果表 C 。
说明 : A 表字段多,所以采用集算器列存二进制文件的方式是有意义的。 B 表字段较少,因此不采用集算器二进制列存的方式,仅对比 Oracle 、集算器文本和集算器行存(二进制)三个测试对象。
6.2. Oracle sql 示例
A 表查询 sql ( 4 个分组字段 4 个汇总字段)
Select g1,g2,g3,g4,sum(n1),sum(n2),sum(n3),sum(n4) from A group by g1,g2,g3,g4
B 表查询 sql ( 4 个分组字段 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 个分组字段一个汇总字段部分)
子程序 groupsub.dfx
子程序 groupsubb.dfx
子程序 groupsubc.dfx
6.4. 测试结果及分析
6.4.1A表(宽表)并行数为1(无并行)
统计计算所用时间,单位:秒。
算法
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
集算器
(文本)
集算器
(行存)
集算器
(列存)
结果行数
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
集算器
(文本)
集算器
(行存)
集算器
(行存分段)
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
集算器
(文本)
集算器
(行存)
集算器
(行存分段)
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
集算器
(文本)
集算器
(行存)
集算器
(行存分段)
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
集算器
(文本)
集算器
(行存)
集算器
(列存)
结果行数
1 并行
285
502
313
121
1464
4 并行
294
265
314
113
1464
分析: 并行计算对集算器文本性能提高明显,其他测试对象不明显。原因在于集算器文本是分段多游标读取数据的,集算器行存和列存都是单个二进制文件,无法多游标分段读取。如果事先将文件分段保存成多个,就可以用分段多游标读取可以提升速度。 Oracle 并行速度提高不明显的原因应该是内部机制造成。
6.5.2 并发数量对B表(窄表)计算性能的影响
这里以 B 表(窄表)的 4 分组 4 汇总的测试数据来横向对比一下,不同并发数量对计算性能的影响。
并行数
Oracle
集算器
(文本)
集算器
(行存)
集算器
(行存分段)
1 并行
1246
1537
1080
936
4 并行
974
393
729
235
8 并行
968
220
761
169
结果分析: 并行计算对集算器行存分段和集算器文本性能提高明显,其他测试对象不明显。原因在于集算器行存分段和集算器文本是分段多游标读取数据的,集算器行存是单个二进制文件,无法多游标分段读取。集算器行存分段是事先将文件分段保存成多个,就可以用分段多游标读取可以提升速度。 Oracle 并行速度提高不明显的原因应该是内部机制造成。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com