日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Flink 能够改写成 FlinkSQL的理论依据:命令式代码 vs 声明式代码

發布時間:2024/2/28 数据库 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 声明式代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。