Flink 能够改写成 FlinkSQL的理论依据:命令式代码 vs 声明式代码
普通的业务逻辑是否能改写成 SQL?Flink 能够改写成 FlinkSQL的理论依据是什么?
当关系模型最初被引入时,就包含了查询数据的不同方法:SQL 是一种声明式查询语言,而 IMS 和 CODASYL 则是命令式。这种差别意味着什么呢?
命令式代码 vs 声明式代码
例如,我有一个动物物种的列表,想要查询列表中的鲨鱼:
1、命令式代码:
function getSharks() {var sharks = [];for (var i = 0; i < animals.length; i++) {if (animals[i].family === "Sharks") {sharks.push(animals[i]);}}return sharks;
}
2、声明式代码:
SELECT * FROM animals WHERE family = 'Sharks';
命令式语言 告诉计算机以特定顺序执行某些操作,而对于 声明式的查询语言,则只需要指定所需的数据格式,结果需要满足什么条件,以及如何转换数据(例如,排序、分组和聚合),而不需要指明如何实现这一目标。
命令式代码 由于指定了特定的执行顺序,很难在多核和多台机器上并行化,声明式语言 则对于并行执行更为友好。
例如,对于 Web 浏览器来说,使用声明式 CSS 样式表比用 JavaScript 命令式地操作样式好得多。类似地,在数据库中,像 SQL 这样的声明式查询语言比命令式查询 APIs 要好得多。
MapReduce 查询
MapReduce 是一个相当底层的编程模型,用于在许多机器上批量处理海量数据。
MapReduce 既不是声明式查询语言, 也不是一个完全命令式的查询 API, 而是介于两者之间: 查询的逻辑用代码片段来表示, 这些代码片段可以被处理框架重复地调用。它主要基于许多函数式编程语言中的 map (也称为 collect) 和 reduce (也称为 fold 或inject) 函数。
map 和 reduce 函数对于可执行的操作有所限制。 它们必须是纯函数, 这意味着只能使用传递进去的数据作为输入, 而不能执行额外的数据库查询, 也不能有任何副作用。这些限制 使得数据库能够在任何位置、 以任意顺序来运行函数, 并在失败时重新运行这些函数。 不管怎样, 该功能非常强大, 可以通过它来解析字符串、 调用库函数、 执行计算等。
读者注:这些限制能够让代码在多台机器上并行执行,更贴近 SQL 这样的声明式查询语言。也正是因为这些限制,让 Flink 任务改写为 FlinkSQL 从理论上是可行的。
参考:《数据密集型应用系统设计》,Martin Kleppmann,P53
Flink 能够改写成 FlinkSQL的理论依据:命令式代码 vs 声明式代码相关推荐
- tensorflow的mnist改写成pytorch
最近公司使用算法要用pytorch,所以本人暂时放弃使用tensorflow,为了练手pytorch,本人首先使用pytorch将tensorflow版本的mnist转换成pytorch版本,tens ...
- ORACLE NOT EXISTS不等值 改写成hive
ORACLE NOT EXISTS不等值 改写成hive SELECT A.A1, A.A2,A.A3,A.A4FROM ALEFT JOIN C ON A.A6= C.C6WHERE NOT EXI ...
- fopen需要改写成fopen_s的时候
FILE* pFile=fopen_s(filename,"rb"); 改写成: FILE* pFile; if(fopen_s(&pFile,filename," ...
- c++ class struct同名_如何把C++的源代码改写成C代码?而C改C++只需一步!
★ 如何把C++的源代码改写成C代码? C++解释器比C语言解释器占用的存储空间要大,想要在某些特定场合兼容C++代码,同时为了节省有限的存储空间,降低成本,也为了提高效率,将用C++语言写的源程序用 ...
- mysql left join和or_Case:MySQL使用left join的时候or改写成union可以提高效率
Case:MySQL使用left join的时候or改写成union可以提高效率 发布时间:2020-07-29 02:29:13 来源:51CTO 阅读:1501 作者:Darren_Chen (1 ...
- 贺利坚老师汇编课程37笔记:把六个字符串里的头一个字母改写成大写字母
指路老师的博客 将datasg段中每个单词的头一个字母改写成大写字母,共六个字符串 像是某个软件的菜单 assume cs:codesg,ds:datasg datasg segmentdb '1. ...
- 把下列c语言的语句改写成汇编语言的程序片段,其中变量都为整形变量,汇编程序设计读书笔记(4)...
第1章 标识符和表达式 1.1 标识符 标识符最多由31个字母.数字及规定的特殊字符(?.@._.$)等组成,但它不能用数字开头.通常情况下,汇编语言不区分标识符中字母的大小写. 1.2 简单内存变量 ...
- 【C语言】世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。
世界上不同国家有不同的写日期的习惯.比如美国人习惯写成"月-日-年",而中国人习惯写成"年-月-日".下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯 ...
- 中国银河证券公募基金分类体系的理论依据与规则基础
中国银河证券公募基金分类体系的理论依据与规则基础 银河证券基金研究中心 4天前 基金分类是基金评价的基础.中国银河证券股份有限公司及其基金研究中心作为基金评价机构,一直致力于基金分类体系的建设.中国银 ...
最新文章
- jupyter|魔法函数问题| UsageError: Line magic function `%` not found
- FusionCharts参数的详细说明
- POJ 2253 Frogger(最短路Floyd)题解
- 将远程服务器获取的linkedhashMap对象转为实体类对象
- **上海铁路局2004年最新时刻发布!**
- 对话Justin Uberti:RTC的过去、现在和未来
- MFC学习之路之多媒体 --(1) DirectShow
- 联通宣布用户存费1300元可获赠21M上网卡
- jdk1.6+Maven
- 几种常用的显示器分辨率
- poj_2945 Find the Clones (Trie树 内存分配)
- 胡阳pyhton作业题--20150728
- HPE增强长期归档存储 转售SpectraLogic高端磁带库
- ctrl+v粘贴快捷键突然不能使用的原因及解决方案
- 拓嘉启远电商:拼多多新店多久才有流量
- 华中科技大学赛尔宽带登录六维空间
- Java:Java静态多态性与动态多态性
- 642-825 认证题库
- Ping32最新版支持钉邮监控
- html-优秀学生信息表格
热门文章
- CodeForces - 1267A Apprentice Learning Trajectory(贪心)
- HDU - 6514 Monitor(二维差分)
- Maximum Subsequence Sum最大子列和问题(c语言实现)
- 线段树空间容纳且最上边的数(单点更新)
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之八 - 打造自己的单元测试框架
- cocos2d-x初探学习笔记(8)--场景特效
- Android端打开HttpDns的正确姿势
- C++ 类和对象(一):类的概念、类的访问控制和封装、类对象模型、this指针
- 第46讲:遇到动态页面怎么办?详解渲染页面爬取
- QUIC 是如何解决TCP 性能瓶颈的?