一直以来,我们有一个愿望:
structured process language
面向过程的结构化数据计算语言
data computing middleware
数据计算中间件
high performance computing
高性能计算
结构化数据总是批量形式
where,order by,group
intersect,union,minus
集合成员可以游离在集合外存在
独立运算或及其它游离成员再组合新集合运算
只有单行记录的表,没有游离记录
计算结果总是新产生,和原记录无关
彻底的集合化需要离散性的支持
允许游离成员组成新集合
有序计算是集合化与离散性的结合物
运算不仅与数据本身有关,还和数据所在位置有关
a | |
---|---|
1 | =股票.sort(交易日).group@i(收盘价<收盘价[-1]).max(~.len()) |
1 | select max(连续日数)-1 from |
---|---|
2 | (select count(*) 连续日数 from |
3 | (select sum(涨跌标志) over ( order by 交易日) 不涨日数 from |
4 | ( select 交易日, |
5 | case when 收盘价>lag(收盘价) over( order by 交易日 then 0 else 1 end 涨跌标志 |
6 | from 股票 )) |
7 | group by 不涨日数) |
a | |
---|---|
1 | =股票.sort(交易日).group(代码) |
2 | =a1.select((a=0,~.pselect(a=if(收盘价>收盘价[-1],a 1,0):3))>0).(代码) |
感受spl分步骤解题的思路,以及有序运算的效能!
1 | with a as |
---|---|
2 | (select 代码,交易日, 收盘价-lag(收盘价) over (paritition by 代码 order by 涨幅) from 股票) |
3 | b as |
4 | (select 代码, |
5 | case when 涨幅>0 and |
6 | lag(涨幅) over (partition by 代码 order by 交易日) >0 and |
7 | lag(涨幅,2) over partition by 代码 order by 交易日) >0 |
8 | then 1 else 0 end 三天连涨标志 from a) |
9 | select distinct 代码 from b where 三天连涨标志=1 |
data computing middleware
数据计算中间件
计算逻辑脚本单独维护,方便模块化
集算器使用java开发,提供标准应用接口可无缝集成到应用中
直接使用多个数据源混合计算,无需后台先将数据统一(etl)后再计算
针对mongodb和文件等使用sql进行查询
目前t 0在线计算常用方式与存在问题
大量的历史数据会导致高昂的数据库成本(存储成本和性能成本)
需要数据库具有跨库运算能力,但实施复杂度较高,性能较低;当数据库类型不同时难以实现
集算器可以基于多个异构数据库完成报表t 0查询;
还可以将历史数据存放到io性能更佳的文件系统中采用集群运算获得更高性能和更低成本
文件系统io性能高于数据库,还可以使用压缩数据存储、列式存储、内存记录引用,以及分布式集群等获得更高性能,减轻数据库负担
high performance computing
高性能计算
软件改变不了硬件的计算性能
但软件可以设计一些高效(低复杂度)算法,降低计算规模,从而提升计算性能
这类方案通常需要定制化,因地制宜,看菜吃饭
集算器使用了诸多高效算法:
了解了计算和数据特征,就可以选用适合的算法,从而获得高性能
测试用例 | intel x86芯片 | 国产飞腾芯片 | |||
---|---|---|---|---|---|
spl读文件计算 | spl读数据库计算 | 数据库中sql计算 | spl读文件计算 | spl读数据库计算 | |
连接后并集 | - | 3.8 | >1小时 | - | - |
连接后交集 | - | 3.9 | >1小时 | - | - |
多对多连接遍历 | 69 | 103 | >1小时 | 93 | 268 |
有序分组遍历 | 100 | 647 | >1小时 | 102 | 2037 |
多步过程计算 | 272 | 848 | >1小时 | 377 | >1小时 |
大分组 | 39 | 155 | 2573 | 56 | 2493 |
大表关联分组 | 111 | 566 | >1小时 | 178 | 2106 |
批量键值查询 | 15 | >1小时 | >1小时 | 15 | >1小时 |
【注】spl是润乾集算器采用的程序设计语言;sql是关系数据库采用的程序设计语言
私有数据存储格式,集文件、组表
支持以树状目录方式按业务分类存储数据
提供内外存两种数据容错机制,外存冗余式容错,内存备胎式容错
支持计算容错,节点故障时自动将该节点计算任务迁移掉其他节点继续完成
用户可根据数据和计算任务的特点灵活定制数据分布及冗余方案,有效减少节点间数据传输量,以获得更高性能
集群没有永久的中心主控节点,程序员用代码控制参与计算的节点
根据每个节点空闲程度(线程数量)决定是否分配任务,实现负担和资源的有效平衡