半夜跑批跑不完,出错了来不及再来
月末年头更是担惊受怕…
半夜跑批跑不完,出错了来不及再来
月末年头更是担惊受怕…
看个报表等10分钟,业务人员拍桌子…
人多了、时间跨度大了,就查不了了
关联统计运算慢,界面拖拽迟钝;
预汇总方案占用空间太大且功能盲区多
花了很多钱上了内存数据库,
结果性能还是不理想…
没有火药,无论如何也造不出枪炮
sql无法实现高性能结构化数据计算
这就是为什么说,好算法不光要想出来,还要能实现
相对sql,java可以实现高效算法,但java实施计算的复杂度过高,可行性较低
高性能算法想得出,写不出(sql),能写出又太难(java)
高性能的本质是开发效率问题,要能想得到、方便写得出
1 2=3
3 3=6
6 4=10
10 5=15
15 6=21
…
1 100=101
2 99=101
…
一共有50个101
50*101=5050
关系数据库的sql就象只有加法的算术体系,而集算器的spl则发明了乘法!
集算器还有更多乘法(高性能计算和存储库),人人都能成为高斯(快速实现高性能算法)
集算器的高性能来源于创新的代数体系
离散数据集模型
也就是集算器发明的"乘法"
解决难写的问题,从而实现高性能算法
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)
这里许多算法都是集算器的发明!
a | ||
---|---|---|
1 | =file("data.ctx").create().cursor() | |
2 | =a1.groups(;top(10,amount)) | 金额在前10名的订单 |
3 | =a1.groups(area;top(10,amount)) | 每个地区金额在前10名的订单 |
高复杂度的排序转换为低复杂度的聚合
a | ||
---|---|---|
1 | =file("order.ctx").create().cursor() | 准备遍历 |
2 | =channel(a1).groups(product;count(1):n) | 配置复用计算 |
3 | =a1.groups(area;sum(amount):amount) | 遍历,并获得分组结果 |
4 | =a2.result() | 取出复用运算的结果 |
一次遍历可返回多个结果集
私有数据存储格式,集文件、组表
支持以树状目录方式按业务分类存储数据
提供内外存两种数据容错机制,外存冗余式容错,内存备胎式容错
支持计算容错,节点故障时自动将该节点计算任务迁移掉其他节点继续完成
用户可根据数据和计算任务的特点灵活定制数据分布及冗余方案,有效减少节点间数据传输量,以获得更高性能
集群没有永久的中心主控节点,程序员用代码控制参与计算的节点
根据每个节点空闲程度(线程数量)决定是否分配任务,实现负担和资源的有效平衡
【场景特征】多并发,业务可能复杂,秒级响应,大数据需集群支持
【场景特征】无并发,实时性要求高,会根据上一步的计算结果决定下一步计算
【场景特征】无并发,不必实时,数据量巨大,对时间窗口要求高
必须!数据密集型计算的存储是性能保障,传统rdb和hadoop的低效存储无法实现高性能
集算器针对内存、外存、集群都设计有专用高效数据组织方案,适应于多种运算场景
集算器基于全新的计算模型,无开源技术可以引用,从理论到代码全部自主创新
基于创新理论的集算器不能再使用sql实现高性能,sql无法描述大部分低复杂度算法
仅对于运算形式规整的多维分析可提供高性能sql接口,以适应各种前端bi工具
集算器专门用于性能优化,提供了专用的spl语法
学习spl不难,数小时即可掌握,数周就能熟练
难的是设计优化算法!
所以我们设计了下面的优化流程
最初的1-2个场景,由润乾高级工程师介入配合用户实现
大多数程序员习惯了sql思维方式,不熟悉高性能算法,需要用一两个场景训练和理解
几十种性能优化套路经历过也就学会了,算法设计和实现并不是那么难
授人以鱼不如授人以渔!