SAP HANA并行编程
2013-04-30 23:12
731 查看
并行对于现代的大数据的处理平台是极其关键的,同样的,SAP HANA亦不例外,从某种程度上来说,正是无所不用其极的并行及其基于内存的计算模式使得SAP HANA的计算性能达到现象级。
相对于Hadoop,在SAP HANA中实现并行编程是比较容易的,SAP HANA的并行对Developer来说是透明的,只需遵循一定的规则,数据库会自动的实现并行。
其中有两条规则至关重要:
1. store procedure须是read only的,即不能有增删改查的语句
2. 各语句之间要尽量的相互独立
举个简单例子:
在上例中tmp1, tmp2由于用到的表是不同的,因此编译器会将这两个语句并行,当然,为了更显示的表示上述语句的独立性,可以将上述store procedure写成两个,即:
但很多时候我们可能只对同一个表进行不同的操作,由于SAP HANA的并行对程序员是透明的,这意味着我们并不能指定操作显示的并行,但此时上面说到的两个规则同样是成立的,应尽可能的让各sql语句之间是相互独立的,当对同一个表进行操作时,各sql语句间相互独立意味着尽可能的是可语句操作同张表的不同部分的数据,如下面的代码所示:
相对于Hadoop,在SAP HANA中实现并行编程是比较容易的,SAP HANA的并行对Developer来说是透明的,只需遵循一定的规则,数据库会自动的实现并行。
其中有两条规则至关重要:
1. store procedure须是read only的,即不能有增删改查的语句
2. 各语句之间要尽量的相互独立
举个简单例子:
DROP PROCEDURE proc_parall; CREATE PROCEDURE proc_parall LANGUAGE READS SQL DATA AS BEGIN tmp1 = SELECT DAY, COUNT(*) AS NUM FROM day_table GROUP BY DAY; tmp2 = SELECT DAY, COUNT(*) AS NUM FROM other_table GROUP BY DAY; SELECT TOP 10 * FROM :tmp1; SELECT TOP 10 * FROM :tmp2; END;
在上例中tmp1, tmp2由于用到的表是不同的,因此编译器会将这两个语句并行,当然,为了更显示的表示上述语句的独立性,可以将上述store procedure写成两个,即:
DROP PROCEDURE part1; CREATE PROCEDURE part1 LANGUAGE READS SQL DATA AS BEGIN tmp1 = SELECT DAY, COUNT(*) AS NUM FROM day_table GROUP BY DAY; SELECT TOP 10 * FROM :tmp1; END; DROP PROCEDURE part2; CREATE PROCEDURE part2 LANGUAGE READS SQL DATA AS BEGIN tmp2 = SELECT DAY, COUNT(*) AS NUM FROM other_table GROUP BY DAY; SELECT TOP 10 * FROM :tmp2; END; DROP PROCEDURE proc_parall; CREATE PROCEDURE proc_parall LANGUAGE READS SQL DATA AS BEGIN CALL part1; CALL part2; END; CALL proc_parall;
但很多时候我们可能只对同一个表进行不同的操作,由于SAP HANA的并行对程序员是透明的,这意味着我们并不能指定操作显示的并行,但此时上面说到的两个规则同样是成立的,应尽可能的让各sql语句之间是相互独立的,当对同一个表进行操作时,各sql语句间相互独立意味着尽可能的是可语句操作同张表的不同部分的数据,如下面的代码所示:
DROP PROCEDURE proc_parall; CREATE PROCEDURE proc_parall LANGUAGE READS SQL DATA AS BEGIN tmp1 = SELECT DAY, COUNT(*) AS NUM FROM day_table WHERE year = 2012 GROUP BY DAY; tmp2 = SELECT DAY, COUNT(*) AS NUM FROM day_table WHERE year=2013 GROUP BY DAY; tmp3 = (SELECT * FROM :tmp1) UNION ALL (SELECT *FROM :tmp2); SELECT top 10 * FROM :tmp3; END;在上例中,tmp1, tmp2 即可并行
相关文章推荐
- Intel软件开发工具及并行编程系列视频的收看指南(2)
- MPI并行编程系列之四:KMP算法及并行化
- C#笔记23:多线程之Task(并行编程)
- 多核时代 .NET Framework 4 中的并行编程3---任务并行库之Task (下)
- 一个多核并行编程的形象比喻
- 并行编程——MPI
- SAP HANA内存数据库与oracle数据库的性能比较
- 学习SAP HANA SQL 语句(创建 EMP,DEPT,BONUS 和 SALGRADE测试表)--像学Oracle一样学习SAP HANA
- 并行编程与PLINQ-数据并行
- Heterogeneous Parallel Programming(异构并行编程)学习笔记(二)
- 异构并行编程(CUDA)结课证书
- SAP HANA中SQLscript的数据类型
- SAP HANA 中的决策表(Decision Table)
- SAP HANA 使用rowid
- [PAL规范]SAP HANA PAL 数据处理装箱算法Binning编程规范BINNING
- [Step By Step]SAP HANA PAL线性回归预测分析Linear Regression实例LRREGRESSION(模型)
- [Step By Step]使用SAP Business Objects Data Services将Excel数据导入到SAP HANA中
- SAP内存计算--HANA 走近SAP HANA
- 深入理解并行编程-分割和同步设计(一)
- SAP HANA 2. SAP HANA Studio使用insufficient privilege 问题