clickHouse-快取引擎
緩衝資料以寫入記憶體,並定期將其重新整理到另一個表。在讀取操作期間,同時從緩衝區和另一個表讀取資料。
Buffer(database, table, num_layers, min_time, max_time, min_rows, max_rows, min_bytes, max_bytes)
引擎引數:
database- 資料庫名稱。可以使用返回字串的常量表示式來代替資料庫名稱。
table –將資料重新整理到的表。
num_layers–並行層。在物理上,該表將表示為num_layers獨立的緩衝區。建議值:16。
min_time,max_time,min_rows,max_rows,min_bytes,和max_bytes-條件從緩衝區重新整理資料。
如果滿足所有min條件或至少一個max條件,則從緩衝區重新整理資料並將其寫入目標表。
min_time,max_time–從第一次寫入緩衝區起的時間(以秒為單位)。
min_rows,max_rows–緩衝區中的行數條件。
min_bytes,max_bytes–緩衝區中位元組數的條件。
在寫操作期間,資料被插入到num_layers許多隨機緩衝區中。或者,如果要插入的資料部分足夠大(大於max_rows或max_bytes),則將其直接寫入目標表,而忽略緩衝區。
對於每個num_layers緩衝區,分別計算重新整理資料的條件。例如,如果num_layers = 16和max_bytes = 100000000,則最大RAM消耗為1.6 GB。
例:
CREATE TABLE merge.hits_buffer AS merge.hits ENGINE = Buffer(merge, hits, 16, 10, 100, 10000, 1000000, 10000000, 100000000)
建立一個具有與’merge.hits’相同結構的’merge.hits_buffer’表,並使用Buffer引擎。寫入此表時,資料會緩衝在RAM中,然後再寫入“ merge.hits”表。建立了16個緩衝區。如果經過了100秒,或者已寫入一百萬行,或者已寫入100 MB資料,則將重新整理其中每個資料;或者同時經過10秒並寫入10,000行和10 MB資料。例如,如果只寫了一行,則無論如何,在100秒後它將被重新整理。但是,如果已寫入許多行,則將更快地重新整理資料。
當伺服器停止時,使用DROP TABLE或DETACH TABLE,緩衝區資料也將重新整理到目標表。
您可以在資料庫名稱和表名稱的單引號中設定空字串。這表明沒有目標表。在這種情況下,當達到資料重新整理條件時,只需清除緩衝區。這對於將資料視窗保留在記憶體中可能很有用。
從緩衝區表讀取資料時,將從緩衝區和目標表(如果有的話)中處理資料。
請注意
緩衝區表不支援索引。換句話說,緩衝區中的資料已被完全掃描,這對於大型緩衝區而言可能很慢。(對於下級表中的資料,將使用其支援的索引。)
如果“緩衝區”表中的列集與從屬表中的列集不匹配,則插入兩個表中都存在的列子集。
如果型別與緩衝區表和從屬表中的任一列都不匹配,則會在伺服器日誌中輸入錯誤訊息,並清除緩衝區。
如果重新整理緩衝區時從屬表不存在,也會發生相同的情況。
如果需要對下級表和Buffer表執行ALTER,建議先刪除Buffer表,對下級表執行ALTER,然後再次建立Buffer表。
如果伺服器異常重啟,緩衝區中的資料將會丟失。
FINAL和SAMPLE對於緩衝區表不能正常工作。這些條件將傳遞到目標表,但不用於處理緩衝區中的資料。如果需要這些功能,建議從目標表讀取時僅使用緩衝區表進行寫入。
將資料新增到緩衝區時,緩衝區之一被鎖定。如果同時從表執行讀取操作,則會導致延遲。
插入到緩衝區表中的資料可能以不同的順序和不同的塊最終出現在從屬表中。因此,很難使用Buffer表正確地寫入CollapsingMergeTree。為了避免出現問題,可以將“ num_layers”設定為1。
如果目標表被複制,則寫入緩衝區表時,複製表的某些預期特性會丟失。資料部分的行順序和大小的隨機變化會導致重複資料刪除退出工作,這意味著不可能對複製表進行可靠的“僅一次”寫入。
由於這些缺點,我們僅建議在極少數情況下使用Buffer表。
當在一個單位時間內從大量伺服器接收到太多INSERT且無法在插入之前對資料進行緩衝的情況下,將使用Buffer表,這意味著INSERT不能足夠快地執行。
注意,即使一次插入緩衝區表也沒有意義。這樣只會產生每秒幾千行的速度,而插入更大的資料塊則每秒會產生一百萬行以上的速度(請參閱“效能”一節)。
- 建立一個目標表
create table tb_user(uid Int8 , name String) engine=TinyLog ;
- 建立一個快取表
CREATE TABLE tb_user_buffer AS tb_user ENGINE = Buffer(merge, hits, 16, 10, 100, 10000, 1000000, 10000000, 100000000) ;
- 向快取表中插入資料
insert into tb_user_buffer2 values(1,’zs’),(2,'ls') ,(3,'ww') ;
- 等待以後檢視目標表中的資料
select * from tb_user ;
相關文章
- ClickHouse-整合引擎(MySQL、HDFS)MySql
- Entrust 在使用 Redis 做快取引擎的時候,快取不更新的問題RustRedis快取
- 快取穿透、快取擊穿、快取雪崩、快取預熱快取穿透
- 快取穿透、快取擊穿、快取雪崩快取穿透
- 快取穿透、快取雪崩、快取擊穿快取穿透
- Redis快取擊穿、快取穿透、快取雪崩Redis快取穿透
- HTTP快取——協商快取(快取驗證)HTTP快取
- [Redis]快取穿透/快取擊穿/快取雪崩Redis快取穿透
- 快取穿透 快取雪崩快取穿透
- 快取問題(一) 快取穿透、快取雪崩、快取併發 核心概念快取穿透
- 快取穿透、快取擊穿、快取雪崩區別快取穿透
- 快取問題(四) 快取穿透、快取雪崩、快取併發 解決案例快取穿透
- ServiceWorker 快取與 HTTP 快取快取HTTP
- mybatis快取-二級快取MyBatis快取
- MyBatis快取機制(一級快取,二級快取)MyBatis快取
- 快取、快取演算法和快取框架簡介快取演算法框架
- 快取淘汰、快取穿透、快取擊穿、快取雪崩、資料庫快取雙寫一致性快取穿透資料庫
- Redis詳解(十二)------ 快取穿透、快取擊穿、快取雪崩Redis快取穿透
- 面試總結 —— Redis “快取穿透”、“快取擊穿”、“快取雪崩”面試Redis快取穿透
- 快取穿透,快取擊穿,快取雪崩解決方案分析快取穿透
- 快取穿透、快取雪崩和快取擊穿是什麼?快取穿透
- Redis——快取穿透、快取擊穿、快取雪崩、分散式鎖Redis快取穿透分散式
- Redis快取穿透、快取雪崩、快取擊穿好好說說Redis快取穿透
- 分散式快取 - 快取簡介,常用快取演算法分散式快取演算法
- 什麼是redis快取雪崩、快取穿透、快取擊穿Redis快取穿透
- Web快取 – HTTP協議快取Web快取HTTP協議
- 快取工廠之Redis快取快取Redis
- 快取最佳化(快取穿透)快取穿透
- Clickhouse-客戶端查詢命令客戶端
- 如何設計快取系統:快取穿透,快取擊穿,快取雪崩解決方案分析快取穿透
- 快取快取
- flutter 獲取應用快取以及清除快取Flutter快取
- 快取專題:HTML5離線快取與HTTP快取快取HTMLHTTP
- http快取策略以及強快取和協商快取淺析HTTP快取
- 快取穿透、快取擊穿、快取雪崩概念及解決方案快取穿透
- REDIS快取穿透,快取擊穿,快取雪崩原因+解決方案Redis快取穿透
- Redis的快取穿透、快取雪崩、快取擊穿的區別Redis快取穿透
- 【Redis】快取穿透,快取擊穿,快取雪崩及解決方案Redis快取穿透