clickhouse 表引擎相關

clickhouse 表引擎

  • MergeTree 類型正則表達式


    • MergeTree(合併樹)

    主要特色:算法

    1. 存儲按主鍵排序的數據。 這使您能夠建立一個小的稀疏索引,以幫助更快地查找數據。
    2. 若是指定了分區鍵,則可使用分區。 ClickHouse支持某些分區操做,這些操做比對相同數據,相同結果的常規操做更有效。 ClickHouse還會自動切斷在查詢中指定了分區鍵的分區數據。這也提升了查詢性能。
    3. 數據複製支持。 ReplicatedMergeTree表族提供數據複製。有關更多信息,請參見數據複製。
    4. 數據採樣支持。 若有必要,能夠在表中設置數據採樣方法。
    5. 參考連接

    該MergeTree系列(*MergeTree)的引擎和其餘引擎是最強大的ClickHouse表引擎。數據庫

    該MergeTree系列中的引擎旨在將大量數據插入表中。數據迅速地逐部分寫入表中,而後應用規則在後臺合併這些部分。這種方法比插入期間連續重寫存儲中的數據效率更高。服務器


    • ReplacingMergeTree(替換合併樹)

    該引擎與MergeTree的不一樣之處在於,它刪除具備相同主鍵值(或更準確地說,具備相同排序鍵值)的重複條目。數據結構

    重複數據刪除僅在合併期間發生。合併發生在後臺的未知時間,所以您沒法爲此計劃。某些數據可能仍未處理。儘管您可使用OPTIMIZE查詢運行計劃外的合併,但不要期望使用它,由於OPTIMIZE查詢將讀取和寫入大量數據。多線程

    所以,ReplacingMergeTree它適合於在後臺清除重複數據以節省空間,但不能保證不存在重複數據。併發

    參考連接異步


    • SummingMergeTree(求和合並樹)

    引擎從MergeTree繼承。區別在於,在合併SummingMergeTree表的數據部分時,ClickHouse會將全部具備相同主鍵(或更準確地說,具備相同排序鍵)的行替換爲一行,該行包含數字數據類型的列的彙總值。若是排序鍵的組成方式是單個鍵值對應於大量行,則這將大大減小存儲量並加快數據選擇的速度。分佈式

    建議與一塊兒使用引擎MergeTree。將完整數據存儲在MergeTree表中,並SummingMergeTree用於彙總數據存儲,例如,在準備報告時。這樣的方法將防止您因爲主鍵構成不正確而丟失有價值的數據。函數

    參考連接


    • AggregatingMergeTree(合併合併樹)

    引擎繼承自MergeTree,更改了數據部分合並的邏輯。ClickHouse用存儲聚合函數狀態組合的單行(在一個數據部份內)用相同的主鍵(或更準確地說,用相同的排序鍵)替換全部行。

    您能夠將AggregatingMergeTree表用於增量數據聚合,包括聚合的物化視圖。

    引擎處理全部具備AggregateFunction類型的列。

    AggregatingMergeTree若是按順序減小行數,則適合使用。

    參考連接


    • CollapsingMergeTree(摺疊合併樹)

    該引擎繼承自MergeTree,並將摺疊行的邏輯添加到數據部分合並算法中。

    CollapsingMergeTree若是排序鍵(ORDER BY)中的全部字段都相等,則異步刪除(摺疊)成對的行,除了Sign能夠具備1和-1值的特定字段。沒有對的行將保留。有關更多詳細信息,請參見文檔的「 摺疊」部分。

    引擎能夠顯着減小存儲量並所以提升SELECT查詢效率。

    參考連接


    • VersionedCollapsingMergeTree

    該引擎:

    1. 容許快速寫入不斷變化的對象狀態。

    2. 刪除背景中的舊對象狀態。這大大減小了存儲量。

    3. 有關詳細信息,請參見「 摺疊 」部分。

    引擎繼承自MergeTree,並將用於摺疊行的邏輯添加到用於合併數據部分的算法中。VersionedCollapsingMergeTree具備與CollapsingMergeTree相同的目的,可是使用了不一樣的摺疊算法,該算法容許以多個順序以任何順序插入數據。特別是,Version即便以錯誤的順序插入行,該列也有助於正確摺疊行。相反,CollapsingMergeTree僅容許嚴格連續插入。

    參考連接


    • GraphiteMergeTree

    該引擎旨在稀疏和彙總/平均(彙總)石墨數據。這對於但願將ClickHouse用做Graphite的數據存儲的開發人員頗有幫助。

    若是不須要彙總,可是若是須要彙總使用,則可使用任何ClickHouse表引擎來存儲Graphite數據GraphiteMergeTree。該引擎減小了存儲量並提升了從Graphite查詢的效率。

    引擎從MergeTree繼承屬性。

    參考連接


適用於高負載任務的最通用和功能最強大的表引擎。這些引擎的共同特色是能夠快速插入數據並進行後續的後臺數據處理。 MergeTree系列引擎支持數據複製(使用Replicated* 的引擎版本),分區和一些其餘引擎不支持的其餘功能。


  • Log 類型

    共同屬性:

    1. 數據存儲在磁盤上。
    2. 寫入時將數據追加在文件末尾。
    3. 不支持突變操做。
    4. 不支持索引。這意味着 SELECT 在範圍查詢時效率不高。
    5. 非原子地寫入數據。 若是某些事情破壞了寫操做,例如服務器的異常關閉,你將會獲得一張包含了損壞數據的表。

    • TinyLog

    最簡單的表引擎,用於將數據存儲在磁盤上。每列都存儲在單獨的壓縮文件中。寫入時,數據將附加到文件末尾。

    併發數據訪問不受任何限制: - 若是同時從表中讀取並在不一樣的查詢中寫入,則讀取操做將拋出異常 - 若是同時寫入多個查詢中的表,則數據將被破壞。

    這種表引擎的典型用法是 write-once:首先只寫入一次數據,而後根據須要屢次讀取。查詢在單個流中執行。換句話說,此引擎適用於相對較小的表(建議最多1,000,000行)。若是您有許多小表,則使用此表引擎是適合的,由於它比Log引擎更簡單(須要打開的文件更少)。當您擁有大量小表時,可能會致使性能低下,但在可能已經在其它 DBMS 時使用過,則您可能會發現切換使用 TinyLog 類型的表更容易。不支持索引。

    參考連接


    • StripeLog

    參考連接


    • Log

    日誌與 TinyLog 的不一樣之處在於,"標記" 的小文件與列文件存在一塊兒。這些標記寫在每一個數據塊上,而且包含偏移量,這些偏移量指示從哪裏開始讀取文件以便跳過指定的行數。這使得能夠在多個線程中讀取表數據。對於併發數據訪問,能夠同時執行讀取操做,而寫入操做則阻塞讀取和其它寫入。Log 引擎不支持索引。一樣,若是寫入表失敗,則該表將被破壞,而且從該表讀取將返回錯誤。Log 引擎適用於臨時數據,write-once 表以及測試或演示目的。

    參考連接


具備最小功能的輕量級引擎。當您須要快速寫入許多小表(最多約100萬行)並在之後總體讀取它們時,該類型的引擎是最有效的。

差別

  1. 併發訪問數據的鎖。
    • INSERT 請求執行過程當中表會被鎖定,而且其餘的讀寫數據的請求都會等待直到鎖定被解除。若是沒有寫數據的請求,任意數量的讀請求均可以併發執行。
  2. 並行讀取數據。
    • 在讀取數據時,ClickHouse 使用多線程。 每一個線程處理不一樣的數據塊。

Log 引擎爲表中的每一列使用不一樣的文件。StripeLog 將全部的數據存儲在一個文件中。所以 StripeLog 引擎在操做系統中使用更少的描述符,可是 Log 引擎提供更高的讀性能。

TingLog 引擎是該系列中最簡單的引擎而且提供了最少的功能和最低的性能。TingLog 引擎不支持並行讀取和併發數據訪問,並將每一列存儲在不一樣的文件中。它比其他兩種支持並行讀取的引擎的讀取速度更慢,而且使用了和 Log 引擎一樣多的描述符。你能夠在簡單的低負載的情景下使用它。


  • Intergation engines 類型

    • Kafka
    • MySQL
    • ODBC
    • JDBC
    • HDFS

用於與其餘的數據存儲與處理系統集成的引擎。 以上是其餘數據存儲類型引擎。

參考連接


  • 用於其餘特定功能的引擎


    • Distributed -- 分佈式引擎

    分佈式引擎自己不存儲數據, 但能夠在多個服務器上進行分佈式查詢。 讀是自動並行的。讀取時,遠程服務器表的索引(若是有的話)會被使用。 分佈式引擎參數:服務器配置文件中的集羣名,遠程數據庫名,遠程表名,數據分片鍵(可選)

    參考連接


    • MaterializedView -- 物化視圖引擎

    用於實現實例化視圖(有關更多信息,請參見CREATE TABLE)。爲了存儲數據,它使用在建立視圖時指定的其餘引擎。從表中讀取時,它僅使用此引擎。

    參考連接


    • Dictionary -- 字典引擎

    字典引擎將字典數據顯示爲ClickHouse表

    參考連接


    • Merge -- 表合併引擎

    合併引擎(不要與MergeTree混淆)不存儲數據自己,但容許同時讀取任何數量的其餘表。讀數自動並行化。不支持寫入表。在讀取時,若是存在,則使用實際正在讀取的表的索引。合併引擎接受參數:數據庫名稱和表的正則表達式。

    參考連接


    • File -- 文件引擎

    File表引擎以一種受支持的文件格式(TabSeparated,Native等)將數據保存在文件中。

    用法示例:

    1. 數據從ClickHouse導出到文件。
    2. 將數據從一種格式轉換爲另外一種格式。
    3. 經過編輯磁盤上的文件來更新ClickHouse中的數據。

    參考連接


    • Null -- 空值引擎

    寫入Null表時,數據將被忽略。從Null表讀取時,響應爲空。

    可是,您能夠在Null表上建立實例化視圖。所以,寫入表的數據將最終出如今視圖中。

    參考連接


    • Set

    始終位於RAM中的數據集。它旨在在IN運算符的右側使用(請參見「 IN運算符」部分)。

    您可使用INSERT將數據插入表中。新元素將添加到數據集,而重複項將被忽略。可是您不能從表中執行SELECT。檢索數據的惟一方法是在IN運算符的右半部分使用它。

    數據始終位於RAM中。對於INSERT,插入的數據塊也將寫入磁盤上表的目錄中。啓動服務器時,此數據將加載到RAM。換句話說,從新啓動後,數據保留在原位。

    對於服務器的從新啓動,磁盤上的數據塊可能會丟失或損壞。在後一種狀況下,您可能須要手動刪除數據損壞的文件。

    參考連接


    • Join -- 錶鏈接引擎

    準備在JOIN操做中使用的數據結構。

    參考鏈接


    • URL

    管理遠程HTTP / HTTPS服務器上的數據。該引擎相似於文件引擎。

    參考連接


    • View -- 實現視圖

    用於實現視圖(有關更多信息,請參見CREATE VIEW query)。它不存儲數據,而僅存儲指定的SELECT查詢。從表中讀取時,它將運行此查詢(並從查詢中刪除全部沒必要要的列)。

    參考連接


    • Memory -- 內存引擎

    內存引擎以未壓縮的形式將數據存儲在RAM中。數據以與讀取時徹底相同的形式存儲。換句話說,從該表中讀取是徹底免費的。併發數據訪問已同步。鎖很短:讀和寫操做不會互相阻塞。不支持索引。讀取並行化。經過簡單的查詢,能夠達到最高的生產率(超過10 GB /秒),由於無需從磁盤讀取,解壓縮或反序列化數據。(咱們應該注意,在許多狀況下,MergeTree引擎的生產率幾乎同樣高。)從新啓動服務器時,數據從表中消失,而且表變爲空。一般,使用此表引擎是不合理的。可是,它能夠用於測試,

    系統將內存引擎用於具備外部查詢數據的臨時表(請參見「用於處理查詢的外部數據」部分),以及用於實現GLOBAL IN(請參見「 IN運算符」部分)

    參考連接


    • Buffer -- 緩衝引擎

    緩衝數據以寫入RAM,並按期將其刷新到另外一個表。在讀取操做期間,同時從緩衝區和另外一個表讀取數據

    參考連接

相關文章
相關標籤/搜索