calsite原理 Calcite原理和經驗總結

2021-10-13 09:20:44 字數 1687 閱讀 6414

概述calcite(最初被命名為optiq,由julian hyde編寫,之後成為apache專案)是乙個動態資料管理框架,不考慮資料的儲存、處理資料的演算法以及元資料的儲存問題,只保留了重要的資料庫管理功能,成為應用程式和多個資料來源互動的中介。

optiq起初在hive專案中,為其提供成本優化模型,即cbo(cost based optimization)。它是面向hadoop新的查詢引擎,提供了olap和流sql查詢引擎。當前,還應用於flink解析和流sql處理、drill的解析和jdbc介面等、kylin的olap。

calcite的目標是一種方案適應所有需求場景(one size fits all),希望能夠為不同計算平台提供統一查詢引擎,讓訪問hadoop上的資料跟傳統資料庫訪問方式一樣(sql和高階查詢優化)。

主要特性sql解析、驗證和優化,支援標準函式和聚合函式,提供jdbc驅動查詢能力;

連線不同前端(sql、pig等翻譯為關係代數)和不同後端(介面卡對接各種儲存介面);

支援關係代數、定製邏輯規則和基於cbo和rbo優化的查詢引擎;

物化檢視管理以及物化檢視lattice和tile機制來應用於olap分析;

支援對流資料的查詢。

基本原理

calcite框架中的主要介面,都可以單獨被整合使用。例如:提供jdbc介面實現、sql的解析和元資料校驗、關係代數轉換為執行計畫(cbo和rbo)等;

jdbc client對外通過驅動類載入訪問jdbc server, server服務通過jetty對外提供;

sqlparser將sql解析成sqlnode,並通過validator驗證sqlnode資訊;operator exp將sqlnode轉為relnode樹

queryoptimizer將relnode基於規則或成本優化執行計畫。

示例解析

執行sql:select a,b,c from tab where a = 11

3--logicalfilter

----logicalproject

------logicaltablescan

優化方式:

1)rbo:預先定義一些規則,來優化執行計畫(hepplanner)

比如先過濾,再投影,可以減小資料量,優化如下:1

3--logicalproject

---- logicalfilter

------logicaltablescan

2)cbo: 計算sql所有可能執行的代價,選擇乙個代價較低(volcanoplanner)

計算logicalproject、logicalfilter、logicaltablescan轉為不同的執行計畫所具有的代價,選擇不是最壞的、相對較小的。

實戰總結

對於長度很長的大sql,在翻譯為物理執行計畫(對接底層儲存引擎的處理邏輯)時,有可能會超過janino約束的64kb大小,導致物理計畫生成失敗;

對於大sql中的組合條件巢狀不可以太深,否則會導致sql解析器報棧溢位;

calcite作為計算框架的sql引擎,除了下推到底層儲存的運算元操作,其他都是在記憶體中計算的,因此對資源的要求比較高;

同樣的sql或者預編譯sql生成的物理執行計畫,目前發現jvm裝載完成後並沒有復用,持續的查詢反而造成了方法區class暴增,導致permgen overflow。然後,修改原始碼將每次建立的statement強制關閉,使得fullgc時class可以被unload,避免permgen overflow。

DNS原理 HTTP原理 TCP原理

開啟網頁 輸入 檢視本地的dns庫是否存在該 的網域名稱與對應ip位址 接下有兩種情況 本地存在該 網域名稱對應的ip hosts檔案 然後我們直接根據本地快取的dns進行解析,並訪問該網域名稱對應的ip位址,在進行tcp的三次握手,進行與 的連線,當然我們訪問 完畢之後,又進行了四次揮手斷開 本地...

mvcc原理 MySQL MVCC原理

1 mvcc基本原理 mvcc 多版本併發控制 mvcc,multiversion currency control 一般情況下,事務性儲存引擎不是只使用表鎖,行加鎖的處理資料,而是結合了mvcc機制,以處理更多的併發問題。mvcc處理高併發能力最強,但系統開銷 比最大 較表鎖 行級鎖 這是最求高併...

mvcc原理 MVCC 原理

mvcc 原理 簡單說,讀了一條未提交的資料 乙個事務讀取了另外乙個事務修改後記錄 強調的是 update 和delete 只需要鎖住滿足條件的記錄即可 乙個事務讀取了另外乙個事務插入的資料,強調的是 insert 要鎖住滿足條件及相近的記錄。mysql 中預設的隔離級別是可重複讀,可解決髒讀和不可...