12_VersionedCollapsingMergeTree,Log Engine Family(Log引擎,StripeLog引擎,TinyLog引擎)
11.VersionedCollapsingMergeTree
11.1.VersionedCollapsingMergeTree
11.2.案例
12.Log Engine Family
Log引擎:
StripeLog引擎
TinyLog引擎
12.2.案例
11.VersionedCollapsingMergeTree
11.1.VersionedCollapsingMergeTree
算法:
當ClickHouse合并數據片段時,它會刪除滿足如下條件的行:排序鍵相同,version相同,Sign不同。行的順序無關緊要。
當CLickHouse插入數據時,它按排序鍵對數據進行排序:如果Version列不在排序鍵中,則ClickHouse會將其隱式地作為最后一個字段添加到排序鍵中,并將其用于排序。
11.2.案例
示例數據:
┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┬─Version─┐ │ 4324182021466249494 │ 5 │ 146 │ 1 │ 1 | │ 4324182021466249494 │ 5 │ 146 │ -1 │ 1 | │ 4324182021466249494 │ 6 │ 185 │ 1 │ 2 | └─────────────────────┴───────────┴──────────┴──────┴─────────┘建表:
DROP TABLE IF EXISTS UAct; CREATE TABLE UAct (UserID UInt64,PageViews UInt8,Duration UInt8,Sign Int8,Version UInt8 ) ENGINE = VersionedCollapsingMergeTree(Sign, Version) ORDER BY UserID;插入數據:
INSERT INTO UAct VALUES (4324182021466249494, 5, 146, 1, 1); INSERT INTO UAct VALUES (4324182021466249494, 5, 146, -1, 1),(4324182021466249494, 6, 185, 1, 2);上面執行了兩個INSERT語句,創建了兩個不同的數據片段。如果使用一個INSERT語句,ClickHouse將創建一個數據片段,并且將永遠不會執行任何合并。
查詢數據:
xxxx2 :) select * from UAct;SELECT * FROM UAct┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┬─Version─┐ │ 4324182021466249494 │ 5 │ 146 │ -1 │ 1 │ │ 4324182021466249494 │ 6 │ 185 │ 1 │ 2 │ └─────────────────────┴───────────┴──────────┴──────┴─────────┘ ┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┬─Version─┐ │ 4324182021466249494 │ 5 │ 146 │ 1 │ 1 │ └─────────────────────┴───────────┴──────────┴──────┴─────────┘3 rows in set. Elapsed: 0.009 sec. xxxx2 :)通過兩個INSERT語句,創建了兩個數據片段。SELECT查詢是在兩個線程中執行的,我們得到了隨機順序的行。由于尚未合并數據片段,折疊還未發生。我們無法預測ClickHouse在何時執行數據片段的合并。因此,我們需要使用聚合:
SELECTUserID,sum(PageViews * Sign) AS PageViews,sum(Duration * Sign) AS Duration,Version FROM UAct GROUP BY UserID, Version HAVING sum(Sign) > 0;結果如下:
┌──────────────UserID─┬─PageViews─┬─Duration─┬─Version─┐ │ 4324182021466249494 │ 6 │ 185 │ 2 │ └─────────────────────┴───────────┴──────────┴─────────┘如果不適用聚合,可以對FROM子句使用FINAL修飾符進行強制合并:
xxxx2 :) select * from UAct FINAL;SELECT * FROM UAct FINAL┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┬─Version─┐ │ 4324182021466249494 │ 6 │ 185 │ 1 │ 2 │ └─────────────────────┴───────────┴──────────┴──────┴─────────┘1 rows in set. Elapsed: 0.011 sec. xxxx2 :)要注意的是使用FINAL的這種數據查詢的方法非常低效,不要在大表中使用這種方法。
12.Log Engine Family
這些引擎適用于快速寫入許多小數據量(少于100萬行)的表,在后續使用時整體讀取表數據。
12.1.Log Engine Family:
?StripLog
?Log
?TinyLog
通用屬性:
1.數據存儲在磁盤上
2.寫入時將數據追加到文件末尾
3.支持并發數據訪問的鎖(寫阻塞讀/寫,讀不影響)
4.不支持mutation操作
5.不支持索引
6.不支持原子地寫入數據
磁盤文件存儲:
1.Log引擎:
2.StripeLog引擎
# ll /var/lib/clickhouse/data/default/table_stripelog/ -rw-r----- 1 clickhouse clickhouse 1044 3月 14 01:38 data.bin -rw-r----- 1 clickhouse clickhouse 536 3月 14 01:38 index.mrk -rw-r----- 1 clickhouse clickhouse 70 3月 14 01:38 sizes.json3.TinyLog引擎
# ll /var/lib/clickhouse/data/default/table_tinylog/ -rw-r----- 1 clickhouse clickhouse 168 3月 14 01:37 duration.bin -rw-r----- 1 clickhouse clickhouse 168 3月 14 01:37 pageviews.bin -rw-r----- 1 clickhouse clickhouse 107 3月 14 01:37 sizes.json -rw-r----- 1 clickhouse clickhouse 258 3月 14 01:37 userid.binLog Engine Family文件總結:
| Log | 每列一個文件 | 支持 | 高 | 有 |
| StripeLog | 所有列一個文件 | 支持 | 較高 | 有 |
| TinyLog | 每列一個文件 | 不支持 | 低 | 無 |
12.2.案例
(1)建表
DROP TABLE table_tinylog; CREATE TABLE table_tinylog(userid UInt64,pageviews UInt8,duration UInt8 ) ENGINE = TinyLog; DROP TABLE table_log; CREATE TABLE table_log(userid UInt64,pageviews UInt8,duration UInt8 ) ENGINE = Log; DROP TABLE table_stripelog; CREATE TABLE table_stripelog(userid UInt64,pageviews UInt8,duration UInt8 ) ENGINE = StripeLog;(2)、插入數據
三張表插入同樣的數據:
(3)、查看文件系統的數據目錄
table_log表(基于Log引擎)
table_stripelog表(基于StripeLog引擎)
[root@xxxx2 ~]# ll /var/lib/clickhouse/data/default/table_stripelog/ 總用量 12 -rw-r----- 1 clickhouse clickhouse 1044 11月 30 20:02 data.bin -rw-r----- 1 clickhouse clickhouse 536 11月 30 20:02 index.mrk -rw-r----- 1 clickhouse clickhouse 70 11月 30 20:02 sizes.json [root@xxxx2 ~]#table_tinylog表(基于TinyLog引擎)
[root@xxxx2 ~]# ll /var/lib/clickhouse/data/default/table_tinylog/ 總用量 16 -rw-r----- 1 clickhouse clickhouse 168 11月 30 20:02 duration.bin -rw-r----- 1 clickhouse clickhouse 168 11月 30 20:02 pageviews.bin -rw-r----- 1 clickhouse clickhouse 107 11月 30 20:02 sizes.json -rw-r----- 1 clickhouse clickhouse 258 11月 30 20:02 userid.bin [root@xxxx2 ~]#總結
以上是生活随笔為你收集整理的12_VersionedCollapsingMergeTree,Log Engine Family(Log引擎,StripeLog引擎,TinyLog引擎)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 夜市小吃学什么好?
- 下一篇: 13_clickhouse,Merge引