集算器 - 数据敏捷计算

应用场景有哪些?

  • 报表数据源
  • Java计算层
  • 数据准备
  • 数据微服务
  • 轻量级中台

以上场景有哪些痛点?

报表数据源

  • SQL/存储过程过于复杂,开发效率低
  • 涉及文本/XLS/HTTP等无计算能力的数据源,开发繁琐
  • Java计算,与应用耦合性过高,维护困难
  • 大数据报表导出内存溢出,访问速度慢
  • T+0实时报表,跨库实现难度高
  • 数据库中间表繁多难以管理,大量耗用数据库资源

Java计算层

  • 直接Java计算,代码冗长且很难复用
  • 实现开发周期长,性能不确定,质量不可控
  • 应用耦合过高,算法修改会导致整个应用重新编译部署,缺乏敏捷性

数据准备

  • 专业ETL工具环境复杂,使用不灵活,对人员要求高,难以随时随地准备数据
  • 过程计算复杂,SQL/存储过程难写、难调试
  • 多样性数据源处理困难,经常需要事先数据入库,步骤多效率低

数据微服务

  • 算法编写繁琐、不易维护、扩展性差
  • 多源跨库计算,跨多种类型数据源计算,比如,Oracle+MSSQL
  • 系统集成困难,计算框架或语言和项目工程语言集成困难,比如,Java集成Python

轻量级中台

  • 缺乏简捷的开发技术,开发效率低,应变能力差
  • 缺乏良好的可管理性、集成性、扩展性、开放性
  • 体系结构笨重,需要昂贵的硬件成本与软件授权

报表数据源

【场景特征】原始数据源计算能力弱或应对复杂计算变得非常困难 。

详细了解该场景

JAVA计算层

【场景特征】直接用JAVA实现开发周期长,性能不确定,质量不可控。

详细了解该场景

数据准备

【场景特征】数据访问能力低下,多步骤过程计算,开发调试效率低。

详细了解该场景

数据微服务

【场景特征】算法封装不敏捷、后期维护困难,数据存储不灵活、可扩展性差

详细了解该场景

轻量级中台

【场景特征】数据服务层通过服务化API能够把数据平台和前台业务层对接

应用案例

案例1 某金农项目-报表优化

解决思路

  1. 集算器高性能技术:并行技术、游标技术
  2. 计算层关联:内置结构化计算函数
  3. 报表缓存:避免重复查询
  4. 集算器大数据集:异步计算导出

优化结果

  1. 查询速度:330秒->3秒/10秒
  2. 导出时间:半小时/失败->100秒
  3. 展现速度:提升10倍以上

架构对比

案例2某石化-生成多层动态表

业务需求

生成多维度多层动态叉乘中间表

存在问题

  1. 难以简化:本算法用SQL/存储无法直观表达层级关系,导致复杂的嵌套语句和难懂的多级关联。
  2. 工作量大:SQL表达能力弱,无法用精简的语法实现算法。
  3. 性能差:在SQL中,需要大量临时表储存嵌套的临时数据,耗费了大量的时间。
  4. 难以维护:SQL实现该算法,代码长且复杂,解读困难。
  5. 难以优化:使用SQL/存储实现该算法,代码量巨大,无法耗费更多时间来优化。

解决方案

使用集算器中的高性能函数,对象访问,内存计算等功能,实现本算法,有效的提升了执行性能。

  1. 快速开发
  2. 代码精简(11行)易维护
  3. 可优化(基于中间层再计算)
  4. 高性能

指标对比

案例3木槿生活-数据资源整合

项目价值

  1. 快速响应:及时满足业务需求,实现数据驱动运营
  2. 低成本方案:解决报表性能问题,给数据库减压
  3. 工具化:报表开发实现工具化,IT人员就可以解决
  4. 扩展性:二期项目扩建,实现资源共享,奠定基础

集算器优势

解决方案

详细了解该案例

为什么要用集算器?

易用

容易理解、化繁为简

= 人员要求更低

功能

多样数据、类库丰富

= 实现方法更快

性能

适应大数据、自主可控

= 运算能力更强

应用

快速集成、灵活部署

= 体系结构更轻

开发环境

即装即用,调试功能完善

类库丰富

专门针对结构化数据表设计

分组、循环

分组、循环

排序、过滤

排序、过滤

集合运算

集合运算

有序集合

有序集合

Java集成

集算器使用JAVA开发,可以通过嵌入式集成或服务式调用集成到应用中

详细内容

语言对比

对比SQL

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

SQL代码

1 SELECT max(连续日数)-1 FROM
2 from (select count(*) 连续日数
3 from (select sum(涨跌标志) over(order by 交易日) 不涨日数
4 from (select 交易日,
5 case when 收盘价>lag(收盘价) over(order by 交易日)
6 then 0 else 1 end 涨跌标志
7 from 股价表) )
8 group by 不涨日数)
思考:按照自然思维怎么做?

SPL代码

  A
1 =股价表.sort(交易日)
2 =0
3 =A1.max(A2=if(收盘价>收盘价[-1],A2+1,0))
语法体系更容易描述人的思路
数据模型不限制高效算法实现

对比Python

示例生成数据透视表

Python

1 import pandas as pd
2 user_watch_data = pd.read_csv('user_watch1.cvs')
3 music_meta_data = pd.read_csv('music_meta1.cvs')
4 u_i_watch_list = []
5 gr = user_watch_data.groupby(['user','music'])
6 for (userid,musicid),group in gr:
7 u_i_watch_list.append([userid,musicid,group['listen_time'].mean()])
8 data_listen_time = pd.DataFrame(u_i_watch_list,columns=['user','music','listen_time'])
9 data_merge = pd.merge(data_listen_time,music_meta_data,on='music')
10 data_merge['score'] = data_merge['listen_time']/data_merge['long']
11 u_i_s_data = data_merge.loc[:,['user','music','score']]
12 u_i_s_data = pd.pivot_table(u_i_s_data,index = 'music',colums='user',values='score')
Python:需要显示循环代码才能实现分组与转置动作

SPL代码

  A
1 =file(“user_watch1.csv”).import@tc()
2 =file(“music_meta1.csv”).import@tc().key(music)
3 =A1.groups(user,music,avg(listen_time):listen_time)
4 =A3.join(music,A2,listen_time/long:score).new(user,music,sorce)
5 =A4.id(user).concat@cq()
6 =A4.pivot(music;user,score;${A5})
SPL:集合运算领域专业语法,同样过程代码更简洁

集算器与常用语言的对比优势

SPL技术优势特点

  • 敏捷性即装即用,环境配置简单,无须额外插件
  • 适用性完善的类库和过程计算,适应复杂数据处理
  • 易用性语法简单直观,调试方便,无须专业程序员
  • 开放性内置多种数据源访问接口,直接计算
  • 集成性无缝嵌入应用系统,易于转为日常计算