08_clickhouse主键/索引的工作机制(MergeTree的稀疏索引、索引的生成过程、索引的查询),数据标记的工作机制(数据存储、数据标记、数据查询、数据查询示例)(学习笔记)
5.主鍵/索引的工作機制
5.1.MergeTree的稀疏索引
5.2.索引的生成過程
5.3.索引的查詢
6.數據標記的工作機制
6.1.數據存儲
6.2.數據標記
6.3.數據查詢
6.4.數據查詢示例
5.主鍵/索引的工作機制
5.1.MergeTree的稀疏索引
數據按照主鍵排序后存儲的
每個索引記錄對應8192條記錄(有index_grandularity指定),索引是常駐內存的。
索引是常駐內存的。
5.2.索引的生成過程
索引由Primary Key指定。索引數據保存在primary.idx文件中。
這里假設索引粒度(index_grandularity)為3,即每3條數據生成一條索引記錄。
5.3.索引的查詢
前后相鄰的兩個索引的值,構成索引的范圍。
根據主鍵的查詢條件,確定索引范圍。
(1)、id in (‘A02’, ‘A08’), 轉化為索引范圍區間[A01, A04] 和 [A07, A10], 對應索引標記0和2中查詢數據。。
(2)、id = ‘A04’, 在索引范圍[A01, A04]和[A04, A07]區間查詢數據,對應索引標記0和1。
(3)、id > ‘A11’, 在索引范圍[A10, +inf]區間查詢數據,對應所有值大于3的索引標記。
(4)、id like ‘A0%’, 在索引范圍[A01, A04]、[A04,A07]和[A07, A10]區間查詢數據,對應索 引標記為0、1和2。
6.數據標記的工作機制
6.1.數據存儲
bin文件是真正存儲數據的文件。
bin文件的數據是按照排序健排序后存儲的。
一個bin文件由N個壓縮數據塊組成。
一個壓縮數據塊存儲壓縮前大小為64K~1M字節的數據。
6.2.數據標記
mkt文件是存儲數據標記的文件。
存儲索引標記、壓縮數據塊在BIN文件的偏移量、解壓縮數據塊的偏移量。
假設age字段,每個值占用1字節空間,在該列則一個索引粒度范圍內占用8192 * 1 字節 = 8192字節 = 8KB。
每8(64KB/8KB = 8)個索引粒度,占用一個壓縮數據塊。
壓縮數據塊的切分規則:
(1)、一個壓縮數據塊存儲壓縮前大小為64K~1M 字節的數據。
(2)、按一個索引粒度為最小單位, 添加其對應的數據,用于生 成壓縮數據塊。
(3)、如果一個索引粒度對應的數據小于64K,則繼續添加下一個索引粒度對應的數據,直至數據的大小在64K~1M之間,然后生成壓縮數據塊。
(4)、如果一個索引粒度對應的數據超過1M,則該批次數據將拆分為多個壓縮數據塊存儲。
6.3.數據查詢
1.確定分區(如果有)
2.根據primary.idx確定數據在哪些索引標記內。
3.根據索引標記和數據標記文件(.mrk或.mrk2)確定數據在哪個壓縮數據塊,以及在解壓縮數據塊中的偏移量。
4.加載數據至內存,向量化操作、過濾查詢。
6.4.數據查詢示例
示例1:主鍵查詢
Where id = ‘A02’
1、使用idx索引文件定位到索引標記為0.
2、使用mrk文件,定位數據。
3、將數據加載至內存。
示例2:主鍵+非主鍵查詢
where id=’A04’ and age = 20
1.使用idx索引定位到索引標記為0、1。
2.使用age字段的mrk文件,定位 到壓縮數據塊和數據在解壓縮數 據塊中的偏移量。
3.將數據加載至內存并過濾數據。
示例3:非主鍵查詢
where age = 20
1.由于沒有指定id,將定位到所有的索引標記。
2.使用age字段的mrk文件,掃描所有的壓縮數據塊和數據在解壓縮數據塊中的偏移量。這一步相當于全表掃描。
3.將數據加載至內存并過濾數據。
總結
以上是生活随笔為你收集整理的08_clickhouse主键/索引的工作机制(MergeTree的稀疏索引、索引的生成过程、索引的查询),数据标记的工作机制(数据存储、数据标记、数据查询、数据查询示例)(学习笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二千5千八百步相当于几公里路程?
- 下一篇: 09_ClickHouse,Replac