相比于批量大数据计算,流(式)计算整体上还属于较为新颖的计算概念,下面我们从用户/产品层面来理解下两类计算方式的区别。
批量计算
目前绝大部分传统数据计算和数据分析服务均是基于批量数据处理模型: 使用ETL系统或者OLTP系统进行构造数据存储,在线的数据服务(包括Ad-Hoc查询、DashBoard等服务)通过构造SQL语言访问上述数据存储并取得分析结果。这套数据处理的方法论伴随着关系型数据库在工业界的演进而被广泛采用。但在大数据时代下,伴随着越来越多的人类活动被信息化、进而数据化,越来越多的数据处理要求实时化、流式化,当前这类处理模型开始面临实时化的巨大挑战。传统的批量数据处理模型传统的批量数据处理通常基于如下处理模型:
- 使用ETL系统或者OLTP系统构造原始的数据存储,以提供给后续的数据服务进行数据分析和数据计算。即下图,用户装载数据,系统将根据自己的存储和计算情况,对于装载的数据进行索引构建等一系列查询优化工作。因此,对于批量计算,数据一定需要预先加载到计算系统,后续计算系统才在数据加载完成后方能进行计算。
- 用户/系统主动发起一个计算作业(例如MaxCompute的SQL作业,或者Hive的SQL作业)并向上述数据系统进行请求。此时计算系统开始调度(启动)计算节点进行大量数据计算,该过程的计算量可能巨大,耗时长达数分钟乃至于数小时。同时,由于数据累计的不可及时性,上述计算过程的数据一定是历史数据,无法保证数据的”新鲜”。用户可以根据自己需要随时调整计算SQL,甚至于使用AdHoc查询,可以做到即时修改即时查询。
- 计算结果返回,计算作业完成后将数据以结果集形式返回用户,或者可能由于计算结果数据量巨大保存着数据计算系统中,用户进行再次数据集成到其他系统。一旦数据结果巨大