前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >流表相对论

流表相对论

作者头像
哒呵呵
发布2019-04-26 14:02:13
7510
发布2019-04-26 14:02:13
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记
背景

《Streaming Systems》第二部分讨论的是Stream and Table Relativity,翻译过来就是流表相对论。从Stream and Table Relativity角度看待流(Stream)和表(Table),就会发现它们只不过是一枚硬币的正反两面;正如在爱因斯坦还没有提出相对论时,我们会认为牛顿的理论就是正确的,随着相对论的诞生使我们从更高的维度去思考现实,发现牛顿物理学只不过是相对论的特例而已。

“狭义”上的Stream and Table Relativity

在没有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

广义上的Stream and Table Relativity将The Beam Model一并整合进来,

在Beam模型中,是从流开始到流或者表,Stream作为显示元素,table作为隐式元素,而mapreduce和materialized view是从table到table,table作为显示元素,隐藏了中间的数据流和隐式表。

并抽象出了如下规则:

  • 数据处理过程(无论是批处理还是流处理)都可以被拆分为Stream、Table、Operation三个部分。
  • Table是静态的数据。随着时间的推移,表成为了数据聚合的结果,并可以被观察到。
  • Streams是动态的数据,是表随着时间的推移的演变过程。
  • Operation是流(Stream)和表(Table)的互相转换。
    • stream → stream:针对数据集中元素的非聚合操作(例如filter)将一个流转换成新的流。
    • stream → table:聚合操作(例如sum)将动态的数据(Stream)变成静态的数据(Table)。窗口(window)决定了什么时候将数据输出。
    • table → stream:通过触发操作(triggering)将表的变化输出成流。水印(Watermark)提供了数据的完整性的参考,输出模式(accumulation mode)决定了触发后的结果输出。
    • table → table:不存在静态的数据直接变成另一个静态的数据。

广义上的Stream and Table Relativity是一个非常自然和符合直觉的理论。在 理解了广义上的Stream and Table Relativity后,对于数据如何流动、流(Stream)和表(Table)之间是如何转化的等问题会有一个更深刻的理解。

总结

这一章的Stream and Table Relativity直接奠定了Streaming SQL的基础,同时在某种意义上来说,Stream and Table Relativity通过重新审视"数据"这一分布式系统处理中的核心概念,革新了对数据库、业务流程(业务逻辑本质上就是处理数据库表的变化的一系列逻辑)、分布式处理系统的理解,使得数据是否有界、使用批处理还是流处理的讨论变得不再那么重要。这就是所谓的“降维打击”。


参考文献:

  1. 《Streaming Systems》第六章
  2. https://zhuanlan.zhihu.com/p/43301661
  3. https://www.confluent.io/blog/leveraging-power-database-unbundled/
  4. https://www.confluent.io/blog/turning-the-database-inside-out-with-apache-samza/
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • “狭义”上的Stream and Table Relativity
  • 再更进一步
  • “广义”上的Stream and Table Relativity
  • 总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档