《Streaming Systems》第二部分讨论的是Stream and Table Relativity,翻译过来就是流表相对论。从Stream and Table Relativity角度看待流(Stream)和表(Table),就会发现它们只不过是一枚硬币的正反两面;正如在爱因斯坦还没有提出相对论时,我们会认为牛顿的理论就是正确的,随着相对论的诞生使我们从更高的维度去思考现实,发现牛顿物理学只不过是相对论的特例而已。
在没有Stream and Table Relativity之前,流(Stream)和表(Table)被认为是截然不同的两个东西:表(Table)是行列的集合,每一行都有一个唯一的主键,无论它是显性还是隐性的;流(Stream)是持续不断的数据。
Stream and Table Relativity和爱因斯坦的狭义相对论一样,都来源于对看似简单的事实的深层次思考,并最终革新了日常的认知。狭义相对论的基础是光速的恒定,而Stream and Table Relativity源于数据库表的数据结构是append-only的日志这个简单的事实:当数据库事务应用到一张表时,这些事务会先记录到日志上,然后数据库按照日志顺序物化(materialize)这些更新。这里的日志就可以理解为Stream。表(Table)就是不断应用log(stream)上事务的结果集,而流(Stream)则是表(Table)的changelog。
Streams → tables The aggregation of a stream of updates over time yields a table. Tables → streams The observation of changes to a table over time yields a stream.
随着时间的推移,流(Stream)的变化聚合成表(Table),表(Table)的变化过程成为流(Stream)。这就是狭义下的流(Stream)和表(Table)之间的相关性。
狭义的Stream and Table Relativity给出了流(Stream)和表(Table)之间的相关性,如狭义相对论一样令人耳目一新;但其依然没有达到广义相对论的那种深度,需要我们对流(Stream)和表(Table)的本质做更进一步的思考:在前文,数据被划分为无界数据集和有界数据集并由此引申出了The Beam Model;从另一个角度上来说,所谓无界和有界数据集其实就是不断变化的数据和静止的数据。是的,流(Stream)和表(Table)本质是数据这枚硬币的正反两面,表(Table)是静态的数据;流(Stream)是动态的数据。
Tables are data at rest. Streams are data in motion.
这里的静态和动态不是绝对的。表(Table)的静态指的是数据集在某一个时刻的快照;流(Stream)的动态指的是数据集随着时间变化的过程。
从这个角度出发,《Streaming Systems》的作者重新解构了MapReduce过程和表的materialized views(解构过程相当精彩)。
数据库的基于SQL生成的materialized view和MapReduce把数据计算生成新的derived数据,在外部看来是table到table,是数据块到数据块的过程,然而其内部实现却是要把数据块变成数据流,对流进行流到流操作(filter/map)等,对流进行流到表操作(groupby/aggregate)生成中间的隐式表,然后再用一个full window trigger把隐式表转化为数据流,如此循环最终变成最终表的操作而已。
表是静态的数据,流是动态的数据这个简单的事实就此演化成了广义上的Stream and Table Relativity。
广义上的Stream and Table Relativity将The Beam Model一并整合进来,
在Beam模型中,是从流开始到流或者表,Stream作为显示元素,table作为隐式元素,而mapreduce和materialized view是从table到table,table作为显示元素,隐藏了中间的数据流和隐式表。
并抽象出了如下规则:
广义上的Stream and Table Relativity是一个非常自然和符合直觉的理论。在 理解了广义上的Stream and Table Relativity后,对于数据如何流动、流(Stream)和表(Table)之间是如何转化的等问题会有一个更深刻的理解。
这一章的Stream and Table Relativity直接奠定了Streaming SQL的基础,同时在某种意义上来说,Stream and Table Relativity通过重新审视"数据"这一分布式系统处理中的核心概念,革新了对数据库、业务流程(业务逻辑本质上就是处理数据库表的变化的一系列逻辑)、分布式处理系统的理解,使得数据是否有界、使用批处理还是流处理的讨论变得不再那么重要。这就是所谓的“降维打击”。
参考文献: