不用 SQL 的开源数据仓库
GitHub:https://github.com/SPLWare/esProc
为什么 esProc 不再使用 SQL 了呢?
能力完备
Orders.sort(Amount) // 排序
Orders.select(Amount*Quantity>3000 && like(Client,"*S*")) // 过滤
Orders.groups(Client; sum(Amount)) // 分组
Orders.id(Client) // 去重
join(Orders:o,SellerId ; Employees:e,EId) // 连接
有了过程化和序表的支持,SPL 就可以完成更加丰富的运算。比如对有序运算的支持 SPL 就更为直接和彻底。还有分组运算,SPL 可以保留分组子集,即集合的集合,这样可以很方便完成我们分组后对分组结果的进一步操作。相比之下,SQL 没有显式的集合数据类型,无法返回集合的集合这类数据,不能实现独立的分组,就只能强迫分组和聚合作为一个整体来计算了。
体系开放
文件存储
高性能
=file("orders.txt").cursor@t(area,amount).groups(area;sum(amount):amount)
=file("orders.txt").cursor@tm(area,amount;4).groups(area;sum(amount):amount)
除了游标和并行计算外,SPL 还内置了很多高性能算法。像 TOPN 运算,SPL 把这种运算和普通的聚合运算同样看待后,写出来的取前 N 名的语句中就不会有排序动作,执行效率因此更高。
内存计算类的二分法、序号定位、位置索引、哈希索引、多层序号定位、……
外存查找类的二分法、哈希索引、排序索引、带值索引、全文检索、……
遍历计算类的延迟游标、遍历复用、多路并行游标、有序分组汇总、序号分组、……
外键关联类的外键地址化、外键序号化、索引复用、对位序列、单边分堆、……
归并与连接类的有序归并、分段归并、关联定位、附表、……
多维分析类的部分预汇总、时间段预汇总、冗余排序、布尔维序列、标签位维度、……
-
集群计算类的集群复组表、复写维表、分段维表、冗余与备胎容错、负载均衡、……
评论