64 源码_【ClickHouse内核】源码阅读策略
“?摘要:?本文主要講述如何閱讀ClickHouse開源數據庫代碼的一些方式和技巧。主要內容如下:
ClickHouse開源庫簡介
搭建運行環境
針對于ClickHouse庫提出問題
閱讀開源代碼的步驟
結論
”
01
—
ClickHouse開源庫簡介
ClickHouse是一個開源的列式數據庫(DBMS),主要用于在線分析處理查詢(OLAP),于2016年開源,采用C++開發。憑借優秀的性能,市場反應非常熱烈。
從上面簡介中提取關鍵字
數據庫
列式存儲
在線分析處理查詢OLAP領域
C++開發
ClickHouse庫的特點如下
支持完備的SQL操作
列式存儲與數據壓縮
向量化執行引擎
關系型模型
豐富的表引擎
并行處理
在線查詢
數據分片
ClickHouse開源庫痛點如下
不支持事務。
不擅長根據主鍵按行粒度進行查詢。
不擅長按行更新、刪除數據
通過簡介我們知道了這個開源庫是做什么的,主要特性是什么。那么對于這個開源庫我們不了解具體實現的時候,我們需要試著使用它,看看它都有什么樣的功能。
02
—
搭建運行環境
能搭建開源庫的運行環境一定要搭建,因為通過可運行的開源庫,我們可以很方便的知道,這個開源庫是做什么的?有哪些功能?并且加強了對于整個項目的認知。
ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架構的Linux,FreeBSD或Mac OS X上運行。
官方預構建的二進制文件通常針對x86_64進行編譯,并利用SSE 4.2指令集,因此,除非另有說明,支持它的CPU使用將成為額外的系統需求。下面是檢查當前CPU是否支持SSE 4.2的命令:
$ grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"要在不支持SSE 4.2或AArch64,PowerPC64LE架構的處理器上運行ClickHouse,您應該通過適當的配置調整從源代碼構建ClickHouse。
DEB安裝包
建議使用Debian或Ubuntu的官方預編譯deb軟件包。運行以下命令來安裝包:
$ sudo apt-get install apt-transport-https ca-certificates dirmngr$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4$ echo "deb https://repo.clickhouse.tech/deb/stable/ main/" | sudo tee \ /etc/apt/sources.list.d/clickhouse.list$ sudo apt-get update$ sudo apt-get install -y clickhouse-server clickhouse-client$ sudo service clickhouse-server start clickhouse-client如果您想使用最新的版本,請用testing替代stable(我們只推薦您用于測試環境)。
RPM安裝包
推薦使用CentOS、RedHat和所有其他基于rpm的Linux發行版的官方預編譯rpm包。
首先,您需要添加官方存儲庫:
$ sudo yum install yum-utils$ sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG$ sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64如果您想使用最新的版本,請用testing替代stable(我們只推薦您用于測試環境)。prestable有時也可用。
然后運行命令安裝:
$ sudo yum install clickhouse-server clickhouse-client通過上面兩種方式就可以搭建ClickHouse的環境了,讓我們一起來使用他吧。
通過使用和對于這個開源庫的了解。提出我們想要知道的問題,方便后面我們帶著問題去閱讀開源項目。
03
—
針對于ClickHouse庫提出問題
首先看一下ClickHouse源碼這么大體工作量, 理解開發一個數據庫, 工作量在哪些主要的地方。大致分為下面幾大問題:
用戶怎么下發SQL到服務器后臺,后臺是如何接收用戶的SQL的?(會話管理器)
用戶下發過來的SQL是字符串,ClickHouse是如何轉成自己的格式的?自己的格式又是什么?(SQL解析器)
用戶訪問某些庫、表等數據庫對象是如何控制權限的?(數據庫權限管理器)
表、用戶等數據庫對象的元數據是如何處理的?(數據庫元數據管理器)
數據庫的邏輯計劃是如何生成的?邏輯計劃都做了哪些優化方案?(SQL計劃生成器)
集群中的主節點是如何和從節點通信從而完成一個SQL的計算任務?(SQL調度器)
數據庫的物理計劃是如何處理的?(SQL執行器)
數據庫的表的數據是如何存儲的?存儲在哪里?按照什么格式存儲?(數據存儲器)
集群間節點通信采用什么方案?優化方式有哪些?如何保證傳輸的可靠性?(網絡傳輸管理器)
數據庫支持哪些索引?索引的具體實現方式是什么?(數據庫索引)
數據庫是如何控制并發的?是如何控制內存資源、CPU資源來避免木桶效應?(數據庫資源管理)
04
—
閱讀開源代碼的步驟
通過上面的步驟,我們就要真正的閱讀開源代碼了,那么我們把閱讀開源代碼也分為幾個步驟
閱讀代碼工具的選擇
開源庫源碼目錄分解
網絡資料的搜索
摸清主線,避免過早陷入一些旁枝末節
重視日志信息
閱讀源碼過程中,同步繪制時序圖,固化對流程的理解
閱讀源碼過程中,不斷解決之前提出的問題
看開源庫中的Issues問題列表,看看之前有哪些問題和解決方案是什么?
閱讀代碼工具的選擇
推薦使用Understand,這個工具可以很直觀的生成調用關系圖、類圖、時序圖。是個非常強大的靜態分析工具。
開源庫源碼目錄分解
優秀的開源庫,從源碼的目錄就可以很清晰的了解整個程序的架構是什么?有哪些非常重要的組件?
程序入口
上面是數據庫非常重要的功能,那么ClickHouse的程序入口是什么呢?
dbms/programs目錄說明
benchmark目錄ClickHouse benchmark測試工具
client目錄ClickHouse客戶端命令行工具
compressor目錄ClickHouse數據壓縮和解壓的工具
copier目錄ClickHouse數據遷移工具
extract-from-config目錄獲取配置項工具
format目錄ClickHouse數據格式化工具
local目錄快速處理存儲表的本地文件的工具
obfuscator目錄表數據混淆工具
odbc-bridge目錄odbc鏈接的工具
server目錄ClickHouse服務器相關的代碼
dbms/src目錄說明
Access目錄功能數據庫關于權限控制、資源管理等代碼
AggregateFunctions目錄功能數據庫關于聚集函數功能的代碼
Client目錄網絡關于客戶端的代碼
Columns目錄內存的數據結構中關于列的代碼
Common目錄數據庫共用獨立的代碼
Compression目錄數據壓縮處理邏輯的代碼
Core目錄核心模塊,包括Block、Field、ColumnWithNameAndType、Row定義,SQL標準、DB引擎、DB設置等等
DataBases目錄數據庫,包含數據庫中的操作如表迭代器、庫信息等等
DataStreams目錄輸入輸出流操作管理代碼
DataType目錄數據類型定義相關代碼
Dictionaries目錄Dictionary引擎的處理代碼
Disks目錄磁盤讀寫操作管理代碼
Formats目錄格式轉化相關代碼
Functions目錄系統內置函數相關代碼
Interpreters目錄SQL語句的翻譯和執行相關代碼
IO目錄內核IO相關的代碼
Parsers目錄語句解析,構造AST,遍歷AST元素相關代碼
Processors目錄query執行引擎相關代碼
Storages目錄存儲管理,如分布式表數據分發、MergeTree分布式存儲模塊等等
TableFunctions目錄表函數相關邏輯的處理代碼
05
—
結論
前面我們已經把一個非常大的開源庫ClickHouse的各個目錄都介紹了,那么后續的文章就從我們理解的數據庫常用的SQL執行流程來揭開ClickHouse神秘的面紗并且講述后續代碼閱讀的產出物。
總結
以上是生活随笔為你收集整理的64 源码_【ClickHouse内核】源码阅读策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2 数据源配置_SpringBoot 整
- 下一篇: springboot中spock如何使用