日誌引擎系列 這些引擎是為了需要寫入許多小數據量(少於一百萬行)的表的場景而開發的。 這系列的引擎有: StripeLog Log TinyLog 共同屬性 引擎: 數據存儲在磁碟上。 寫入時將數據追加在文件末尾。 不支持突變操作,也就是更新。 不支持索引。 這意味著 `SELECT` 在範圍查詢時 ...
日誌引擎系列
這些引擎是為了需要寫入許多小數據量(少於一百萬行)的表的場景而開發的。
這系列的引擎有:
- StripeLog
- Log
- TinyLog
共同屬性
引擎:
-
數據存儲在磁碟上。
-
寫入時將數據追加在文件末尾。
-
不支持突變操作,也就是更新。
-
不支持索引。
這意味著 `SELECT` 在範圍查詢時效率不高。
-
非原子地寫入數據。
如果某些事情破壞了寫操作,例如伺服器的異常關閉,你將會得到一張包含了損壞數據的表。
差異
Log
和 StripeLog
引擎支持:
-
併發訪問數據的鎖。
`INSERT` 請求執行過程中表會被鎖定,並且其他的讀寫數據的請求都會等待直到鎖定被解除。如果沒有寫數據的請求,任意數量的讀請求都可以併發執行。
-
並行讀取數據。
在讀取數據時,ClickHouse 使用多線程。 每個線程處理不同的數據塊。
Log
引擎為表中的每一列使用不同的文件。StripeLog
將所有的數據存儲在一個文件中。因此 StripeLog
引擎在操作系統中使用更少的描述符,但是 Log
引擎提供更高的讀性能。
TinyLog
引擎是該系列中最簡單的引擎並且提供了最少的功能和最低的性能。TinyLog
引擎不支持並行讀取和併發數據訪問,並將每一列存儲在不同的文件中。它比其餘兩種支持並行讀取的引擎的讀取速度更慢,並且使用了和 Log
引擎同樣多的描述符。你可以在簡單的低負載的情景下使用它。
Log
與 TinyLog
的不同之處在於,«標記» 的小文件與列文件存在一起。這些標記寫在每個數據塊上,並且包含偏移量,這些偏移量指示從哪裡開始讀取文件以便跳過指定的行數。這使得可以在多個線程中讀取表數據。對於併發數據訪問,可以同時執行讀取操作,而寫入操作則阻塞讀取和其它寫入。Log
引擎不支持索引。同樣,如果寫入表失敗,則該表將被破壞,並且從該表讀取將返回錯誤。Log
引擎適用於臨時數據,write-once 表以及測試或演示目的。
TinyLog
最簡單的表引擎,用於將數據存儲在磁碟上。每列都存儲在單獨的壓縮文件中。寫入時,數據將附加到文件末尾。
併發數據訪問不受任何限制:
如果同時從表中讀取併在不同的查詢中寫入,則讀取操作將拋出異常
如果同時寫入多個查詢中的表,則數據將被破壞。
這種表引擎的典型用法是 write-once:首先只寫入一次數據,然後根據需要多次讀取。查詢在單個流中執行。換句話說,此引擎適用於相對較小的表(建議最多1,000,000行)。如果您有許多小表,則使用此表引擎是適合的,因為它比Log引擎更簡單(需要打開的文件更少)。當您擁有大量小表時,可能會導致性能低下,但在可能已經在其它 DBMS 時使用過,則您可能會發現切換使用 TinyLog 類型的表更容易。不支持索引。
在 Yandex.Metrica 中,TinyLog 表用於小批量處理的中間數據。
stripelog
在你需要寫入許多小數據量(小於一百萬行)的表的場景下使用這個引擎。
建表
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
column1_name [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
column2_name [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = StripeLog
寫數據
StripeLog
引擎將所有列存儲在一個文件中。對每一次 Insert
請求,ClickHouse 將數據塊追加在表文件的末尾,逐列寫入。
ClickHouse 為每張表寫入以下文件:
data.bin
— 數據文件。index.mrk
— 帶標記的文件。標記包含了已插入的每個數據塊中每列的偏移量。
StripeLog
引擎不支持 ALTER UPDATE
和 ALTER DELETE
操作。
讀數據
帶標記的文件使得 ClickHouse 可以並行的讀取數據。這意味著 SELECT
請求返回行的順序是不可預測的。使用 ORDER BY
子句對行進行排序。
使用示例
建表:
CREATE TABLE stripe_log_table
(
timestamp DateTime,
message_type String,
message String
)
ENGINE = StripeLog
插入數據:
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The first regular message')
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message')
我們使用兩次 INSERT
請求從而在 data.bin
文件中創建兩個數據塊。
ClickHouse 在查詢數據時使用多線程。每個線程讀取單獨的數據塊併在完成後獨立的返回結果行。這樣的結果是,大多數情況下,輸出中塊的順序和輸入時相應塊的順序是不同的。例如:
SELECT * FROM stripe_log_table
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:27:32 │ REGULAR │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING │ The first warning message │
└─────────────────────┴──────────────┴────────────────────────────┘
┌───────────timestamp─┬─message_type─┬─message───────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR │ The first regular message │
└─────────────────────┴──────────────┴───────────────────────────┘
對結果排序(預設增序):
SELECT * FROM stripe_log_table ORDER BY timestamp
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR │ The first regular message │
│ 2019-01-18 14:27:32 │ REGULAR │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING │ The first warning message │
└─────────────────────┴──────────────┴────────────────────────────┘
資料分享
參考文章
- ClickHouse(01)什麼是ClickHouse,ClickHouse適用於什麼場景
- ClickHouse(02)ClickHouse架構設計介紹概述與ClickHouse數據分片設計
- ClickHouse(03)ClickHouse怎麼安裝和部署
- ClickHouse(04)如何搭建ClickHouse集群
- ClickHouse(05)ClickHouse數據類型詳解
- ClickHouse(06)ClickHouse建表語句DDL詳細解析
- ClickHouse(07)ClickHouse資料庫引擎解析
- ClickHouse(08)ClickHouse表引擎概況
- ClickHouse(09)ClickHouse合併樹MergeTree家族表引擎之MergeTree詳細解析
- ClickHouse(10)ClickHouse合併樹MergeTree家族表引擎之ReplacingMergeTree詳細解析
- ClickHouse(11)ClickHouse合併樹MergeTree家族表引擎之SummingMergeTree詳細解析
- ClickHouse(12)ClickHouse合併樹MergeTree家族表引擎之AggregatingMergeTree詳細解析
- ClickHouse(13)ClickHouse合併樹MergeTree家族表引擎之CollapsingMergeTree詳細解析
- ClickHouse(14)ClickHouse合併樹MergeTree家族表引擎之VersionedCollapsingMergeTree詳細解析
- ClickHouse(15)ClickHouse合併樹MergeTree家族表引擎之GraphiteMergeTree詳細解析
本文來自博客園,作者:張飛的豬,轉載請註明原文鏈接:https://www.cnblogs.com/the-pig-of-zf/p/17875419.html
公眾號:張飛的豬大數據分享,不定期分享大數據學習的總結和相關資料,歡迎關註。
個人網站"張飛的豬編程工作室"鏈接: https://zhangfeidezhu.com