沉重
数据库建设和使用都非常笨重、臃肿,无法很好适应灵活多变、随处可见的计算需求
封闭
数据库的计算要在库内才能实施,难以完成跨(异构)库计算、无库计算
数据入库费时费力费资源
数据库无法嵌入使用,限制灵活性
同理,Hadoop相关技术也面临同样的问题
数据库建设和使用都非常笨重、臃肿,无法很好适应灵活多变、随处可见的计算需求
数据库的计算要在库内才能实施,难以完成跨(异构)库计算、无库计算
数据入库费时费力费资源
数据库无法嵌入使用,限制灵活性
同理,Hadoop相关技术也面临同样的问题
数据库本身存在结构性问题,而数据库语言(SQL)则又成为影响数据库的另一因素:
SQL不提倡过程,难以实现复杂计算,经常要写得很长
嵌套多层的复杂SQL很难调试
*扩展阅读:SQL像英语是个善意的错误
JAVA也常用于数据计算,但其算法实现比SQL还要复杂(缺少集合运算类库)
Python也被用于数据计算
pandas不是专业结构化数据计算包,在处理分组有序等复杂运算时较为繁琐
python几乎不具备集成性,很难嵌入到应用中实施计算
*扩展阅读:Pandas不擅长的结构化数据运算
计算目标:某支股票最长连续涨了多少交易日
select max(continuousDays)-1 from (select count(*) continuousDays from (select sum(changeSign) over(order by tradeDate) unRiseDays from (select tradeDate, case when closePrice>lag(closePrice) over(order by tradeDate) then 0 else 1 end changeSign from stock) ) group by unRiseDays)
可以试试能不能读懂这句SQL,而这个计算用自然思维很好解决
*扩展阅读:SQL 的困难源于关系代数
select max(continuousDays)-1 from (select count(*) continuousDays from (select sum(changeSign) over(order by tradeDate) unRiseDays from (select tradeDate, case when closePrice>lag(closePrice) over(order by tradeDate) then 0 else 1 end changeSign from stock) ) group by unRiseDays)
SQL在使用窗口函数的情况下嵌套三层完成;
前面读懂了吗?
A | |
---|---|
1 | =stock.sort(tradeDate) |
2 | =0 |
3 | =A1.max(A2=if(closePrice>closePrice[-1],A2+1,0)) |
其实这个计算很简单,按照自然思维:先按交易日排序(行1),然后比较当天收盘价比前一天高就+1,否则就清零,最后求个最大值(行3)
SPL特别适合复杂过程运算
专门针对结构化数据表设计
直接使用多个数据源混合计算,无需后台先将数据统一(ETL)后再计算
通过SPL可以针对MongoDB和文件等使用SQL进行查询
通过SPL可以针对MongoDB和文件等使用SQL进行查询
SPL解释执行,支持不停机热切换
方便地针对单任务实施多线程计算
集算器还可以辅助RDB计算,提升RDB能力
借助集算器的跨库与并行能力实现多数据库集群计算
集算器同时关联多个数据源进行实时数据混算,提供跨源T+0查询
可以通过SPL原生语法进行文件计算,同时支持SQL查文件,简单方便
集算器可以强化MongoDB计算能力,简化计算过程
传统ETL往往先L再ET,费时费力;通过集算器可以实现真正的ETL过程
使用集算器替代JAVA计算可以降低编码难度,提升运算效率
使用JAVA做处理在线计算会导致与应用耦合度过高,集算器可以解耦计算模块,单独运行维护
Java程序必须和主应用一起编译打包,耦合度高
使用Java编写的算法有修改后会导致整个应用重新编译部署,很难做到热切换。
集算器脚本文件可以单独维护,方便模块化
集算器是解释执行的语言,很容易做到热切换
集算器嵌入报表应用中完成报表数据准备工作(计算引擎),弥补报表工具本身计算能力不足