表由按主鍵排序的數據部分組成
1.將數據插入表中時,會創建單獨的數據部分,並且每個部分都按主鍵按字典順序排序。例如,如果主鍵是(CounterID, Date),則部分中的數據按 排序CounterID,每個中的數據按CounterID排序Date。
2.屬於不同分區的數據被分成不同的部分。ClickHouse 在后台合並數據部分以提高存儲效率。屬於不同分區的部分不會合並。合並機制不保證具有相同主鍵的所有行都在同一個數據部分中。
3.數據部分可以存儲Wide或Compact格式化。在Wide格式中,每一列都存儲在文件系統中的單獨文件中,在Compact格式中,所有列都存儲在一個文件中。Compact格式可用於提高小而頻繁插入的性能。
4.數據存儲格式由表引擎的min_bytes_for_wide_part和設置控制。min_rows_for_wide_part如果數據部分中的字節數或行數少於相應設置的值,則該部分以Compact格式存儲。否則以Wide格式存儲。如果未設置這些設置,則數據部分以Wide格式存儲。
5.每個數據部分在邏輯上被划分為顆粒。顆粒是 ClickHouse 在選擇數據時讀取的最小的不可分割數據集。ClickHouse 不會拆分行或值,因此每個顆粒始終包含整數行。顆粒的第一行標有該行的主鍵值。對於每個數據部分,ClickHouse 創建一個存儲標記的索引文件。對於每一列,無論是否在主鍵中,ClickHouse 也存儲相同的標記。這些標記讓您可以直接在列文件中查找數據。粒度大小受表引擎的index_granularity和設置限制。index_granularity_bytes顆粒中的行數位於[1, index_granularity]范圍內,具體取決於行的大小。index_granularity_bytes如果單行的大小大於設置的值,則顆粒的大小可能會超出。在這種情況下,顆粒的大小等於行的大小。
