集算器 - 数据敏捷计算

集算器是什么?

  • 报表数据源
  • Java计算层
  • 离线自由计算

集算器解决什么?

报表数据源

  • 为报表准备数据的SQL长达数K,写起来难,维护更难
  • 数据量大,报表呈现太慢,搞不好还溢出,用户抱怨
  • ......

Java计算层

  • Java计算太繁琐,随便写个过滤分组都要数百行,太繁
  • 算法逻辑改一下,整个应用要重启,难以提供持续服务
  • .......

离线自由计算

  • 大批TXT/CSV/XLS要处理,又没有SQL可用,做个啥事都很繁
  • SQL不好写,python也难学,总要专业程序员才能做,成本高
  • ......

报表数据源

详细了解该场景

JAVA计算层

详细了解该场景

离线自由计算

详细了解该场景

应用案例

案例1 某保险公司 - 库外存储过程

Vertica不支持存储过程,复杂业务逻辑只能用Java写,很麻烦,难维护

用户评价

  1. The best use for us is to pass parameters to the Vertica database.
  2. Each cell becomes a data array that are easy to use, compare and manipulate. It is very logical and you have made it user friendly.

优化结果

  1. 使Vertica支持库外存储过程
  2. 过程化算法实施简单,友好
  3. BIRT数据准备简单高效

案例2某银行 - 计算中间件

Excel种类多达44种,由Java解析数据入库,开发周期长,硬编码难度高

降低开发成本

  1. 全部44种Excel解析由原来的32人天下降到6人天

提升开发效率

  1. 每种Excel解析代码量由100行变为3行

降低维护成本

  1. 除代码量简短易维护外;脚本热部署即修改即生效

集算器凭什么?

开放

不依赖于数据库的计算能力

= 体系结构更轻

语言

新型语法适应复杂过程计算

= 开发编码更简

性能

易于实现高性能算法及并行

= 运算能力更强

应用

标准接口可实现嵌入式集成

= 应用部署更易

独立计算引擎

不依赖于数据库的计算能力,拥有完整的敏捷语法体系

计算过程中不需要数据库

不是转换成SQL交由数据库执行

可以针对任何数据源实施计算

敏捷程序语言

SPL(Structured Process Language)

结合了SQL、Java的共同优势
  • 适应集合批量运算(SQL优势)
  • 擅长分步过程计算(Java优势)
精心设计的丰富库函数和一致性语法
  • 比python更易掌握并且性能更好

示例某支股票最长连续涨了多少交易日?

Python代码

1 import pandas as pd
2 def iterate(col):
3 prev = 0;
4 res = 0;
5 val = 0;
6 for curr in col:
7 if curr – prev > 0:
8 res += 1;
9 else:
10 res = 0;
11 prev = curr;
12 if val < res:
13 val = res;
14 return val;
15 data = pd.read_excel(‘D:/Stock.xlsx’,sheet_name=0). sort_values(‘tradeDate’).groupby(‘Company’)[‘closePrice’].apply(iterate);

SQL代码

1 select max(continuousDays)-1
2 from (select count(*) continuousDays
3 from (select sum(changeSign) over(order by tradeDate) unRiseDays
4 from (select tradeDate,
5 case when closePrice>lag(closePrice) over(order by tradeDate)
6 then 0 else 1 end changeSign
7 from stock) )
8 group by unRiseDays)

SPL代码

  A
1 =stock.sort(tradeDate)
2 =0
3 =A1.max(A2=if(closePrice>closePrice[-1],A2+1,0))

语法体系更容易描述人的自然思维!

集合运算领域专业语法,同样过程代码更简洁!

应用集成与管理

集算器提供标准JDBC接口,
可无缝集成到Java应用中