集算器是一种程序设计语言,专注于(半)结构化数据计算与处理,提供了丰富的此类运算的类库。集算器不是面向对象的程序设计语言,没有复杂的继承和重载概念,引入对象概念仅仅是为了更方便地描述与对象相关的方法,有BASIC这类初级程序设计水平的程序员都能很快掌握。集算器是基于Java解释执行的动态语言,可以在运行过程中拼出代码执行,这样可以获得更大的灵活性,进一步降低程序设计的复杂度。
集算器定位为(半)结构化数据处理,没有直接提供统计分析、数据挖掘和机器学习等算法,也不擅长处理媒体和地图类数据。
与Java等高级语言相比,集算器中提供了大量与结构化计算相关的基础对象和方法,这类运算在数据分析处理备中很常见,因而完成同样功能的代码会比Java短得多,开发效率也自然会远高于用Java等高级语言。
举个例子, Java对一个数据集做过滤要写出几十行甚至上百行代码,如果想处理通用的数据类型和条件的话还会更长,而用集算器只要一句。
集算器对Java应用有非常好的集成性。集算器本身是用Java开发,与Java有天然的兼容性,而且集算器设计定位就是被集成,很容易被Java主应用程序调用。特别地,对于Java报表工具,用集算器为之提供数据源服务非常方便。
大家都知道,用SQL实现很零碎的多步运算很不方便,特别是与次序相关的运算,程序员常常要把数据从数据库中取出来用Java等完成。这是由于SQL的集合化不够彻底、缺乏游离记录、不提倡分步运算等原因导致的(请参见关系代数的问题与尝试(2)关联运算及描述,(3)序运算与离散化)。而集算器则在这方面做了强化,实现非等值分组、分组重用、序运算及多步计算时思路更为直观。这样,集算器相当于把SQL与Java的优势统一起来,让程序员可以既可享受到类似SQL的批量集合式计算、又能获得类似Java的灵活性。
尽管集算器在大多数情况下的语法要比SQL更简单,但它并不能也不打算替代SQL。
数据从数据库读出的IO损耗较高,涉及数据量大的简单运算,数据读出的耗时远远超过运算本身,这种情况还是放在数据库中运算更合适;另外,SQL有元数据机制,其语法的透明度更好,程序员可以无须关心数据的物理存储方案,而集算器是个单纯的计算引擎,没有完善的存储机制,可以计算来自包括文件和数据库的各类数据,但内外存计算的语法不同,需要程序员分别对待。
采用集算器不意味着放弃SQL,而是在协助SQL解决不方便完成的运算,比如复杂多步运算外、多个异构数据库的混合运算等场景。
除SQL外,业界并没有通行的专门用于结构化计算的程序语言,而SQL不仅有上述的计算困难,还由于封闭性导致了使用局限性,比如无法随意地用SQL计算本地文件。因此,常有人使用python(pandas)和R等脚本语言完成此类数据处理。
python(pandas)/R的定位是数学风格的统计分析,虽然提供了dataframe对象用于处理结构化数据,但并不专业,对于外存计算则没有提供直接支持。集算器则是专业的结构化数据处理语言,提供了内存的序表对象(功能相当于dataframe的超集)以及外存的游标对象,能方便编写多线程并行计算,涉及多样性数据源(xls,json,mongodb等)时也有更简单的配置和使用方法。
相反地,集算器不擅长数学风格的统计分析,没有提供这类运算类库。
除独立分析外,结构化计算还经常在应用程序中发生,集算器有良好的Java集成性,可以方便地被Java主程序调用;而python/R等则几乎没有任何集成性可言,程序员很难写一个python算法让Java调用。