流表相对论

背景

《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/

本文分享自微信公众号 - 鸿的笔记(goodreadman),作者:鸿影洲冷

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于用户画像的碎碎念

    最近做了一个某个类型的用户特征分析,让我对用户画像这个领域有了新的看法。这篇文章是对之前整个特征分析过程的一次梳理和总结。

    哒呵呵
  • 大数据的管理(二)

    大数据是为了解决复杂的企业优化问题。为了充分利用大数据,我们必须认识到,数据是一个重要的企业资产,因为数据是互联网经济的命脉。今天的组织依靠数据科学可以做出更明...

    哒呵呵
  • 闲聊数据治理

    这篇文章是2019年对数据治理这个领域的探索过程的简单回顾和总结,在此感谢我们所有数据团队能够在工作的闲暇之余投入到这个看似没有实际效益的领域。

    哒呵呵
  • 面试题十三期-之各大公司数据库相关面试题集合NO2

    解答:Coalescing针对于字典管理的tablespace进行碎片整理,将临近的小extents合并成单个的大extent.

    测试小兵
  • 【警惕】雾霾大数据,你的家乡排第几?

    有一句话叫“浪潮退去,才知道谁在裸泳” 今天,绿色和平要说“数据公开,才知道谁在雾霾” 2015年一季度,中国公开PM2.5浓度数据的城市增至367座,城...

    小莹莹
  • 区块链前世今生

    谈起区块链前世今生,我们不得不先说一下比特币。因为比特币和区块链如鱼水之间一样有着太多的关系。

    腾讯大讲堂
  • 想做流程审批的开发?带你玩转Activity工作流(一)

    现在的很多传统企业转型互联网,最多的“转型”工作之一,就是公司的流程审批模块,如何进行线上操作。最常见的场景,比如请假审批、报表审批、财务审批、人员招聘等等。

    23号杂货铺
  • Elasticsearch集群管理之1——如何高效的添加、删除节点?

    主节点的主要作用之一是确定将哪些分片分配给哪些节点,以及何时在节点之间移动分片以重新平衡集群。

    用户1390885
  • mysql学习总结03 — 列属性(字段属性)

    mysql中的6个列属性:null,default,comment,primary key,unique key,auto_increment

    csxiaoyao
  • 一个登陆框引起的血案

    客户给的测试范围,或者挖众测时,很多时候都只有一个简单的登陆框,想起当初的苦逼的我,只能去测测爆破弱口令,而且还是指定用户名爆破密码这种,当真是苦不堪言;

    FB客服

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动