列式儲存ClickHouse(一)概述

2021-10-10 02:09:09 字數 4541 閱讀 1504

安裝測試

clickhouse,是乙個快速,開源,olap的資料庫管理系統。clickhouse是列式儲存的,支援實時使用sql的查詢生成分析報告。

什麼場景下使用clickhouse

分析乾淨,結構合理且不可變的事件或日誌流。 建議將每個這樣的流放入具有預連線維度的單個寬事實表中。特別是以下場景:

網路和應用分析

廣告網路和實時出價

電信電子商務和金融

資訊保安

監控和遙測

時間序列

商業智慧型

網路遊戲

物聯網根據yandex內部測試結果,在同型別系統中可以比較的操作場景中clickhouse展現出了最佳效能(包括高吞吐量的長查詢,低延遲的短查詢)。

單個大查詢的吞吐量

吞吐量可以以每秒的行數和每秒的兆位元組數衡量,如果資料在頁面快取中,乙個不是太複雜的查詢,在現在硬體裝置上,單節點資料未壓縮的情況下,執行的速率大概為2g——10g每秒(對於最簡單的情況可以達到30g每秒)。如果沒有將資料放在快取中,則速率取決於磁碟和資料壓縮率,例如如果磁碟子系統允許以400m每秒讀取資料,且壓縮率為3,則預期速度為1.2g每秒。要獲得以每秒行數為單位的速率,則以每秒位元組數為單位的速率除以查詢中使用的列的位元組數總和。例如,提取10個位元組,則速度有望達到100-200w行每秒。

對於分布式處理,處理速率以線性增加,但前提是聚合和排序得到的行數不太大。

處理大量端查詢是的吞吐量

在相同條件下,clockhouse可以在一台伺服器上處理每秒處理數百個短查詢(最佳情況下上千個),由於這種情況在資料分析型的dbms中並不常見,因此建議每秒最多100個查詢。

插入資料效能

建議資料插入,一次傳輸至少1000行、或每秒乙個請求的資料報中。從製表符分隔的資料轉儲插入到mergetree表時,插入可以為50mb—200mb每秒。如果插入的行大小約為1kb,則速度位每秒5w至20w行。如果行很小,每秒的行數可以更高。為了提高效能,可以並行進行多個insert查詢,這些查詢可以線性擴充套件。

clickhouse-client登入之後,和mysql終端比較像,包括ddl,dql,dml都類似。

日誌目錄在

/var/log/clickhouse-server/
clickhouse中資料庫和資料表的概念大多數資料庫管理系統一樣,資料庫中有多個資料表,建立資料庫test1

clickhouse-client --query "create database if not exists test1"
建立表的語法要比資料庫複雜一下,包括三要素:

表名稱表結構

表引擎和相關設定,決定了關於這張表的查詢如何物理執行的

建立名稱為events的表,指定儲存引擎為 mergetree

[root@localhost ~]

# clickhouse-client

clickhouse client version 20.10.3.30 (official build).

connecting to localhost:9000 as user default.

connected to clickhouse server version 20.10.3 revision 54441.

localhost :) use test1

use test1

ok.0 rows in set. elapsed: 0.001 sec.

localhost :) create table test1.events(id uint64,status uint8,eventdate date,summary string,description string,userid uint64)engine = mergetree(

) partition by toyyyymm(eventdate) order by (eventdate, inthash32(userid)) sample by inthash32(userid) settings index_granularity = 8192

create table test1.events(`

id`uint64,

`status`

uint8,

`eventdate`

date,

`summary`

string,

`description`

string,

`userid`

uint64

)engine = mergetree(

)partition by toyyyymm(eventdate)

order by (eventdate, inthash32(userid))

sample by inthash32(userid)

settings index_granularity = 8192

ok.0 rows in set. elapsed: 0.056 sec.

在上面的匯入語句中使用了 mergetree 儲存引擎。

資料匯入到clickhouse使用插入語句,像其他sql資料庫一樣。但是,資料通常以某種支援的資料提供,代替sql語句中的vlues語法

下面使用製表符分隔的資料,通過控制台客戶端匯入到clickhouse

插入資料如下

1	1	2020-10-11	西安	違法停車	1001

2 1 2020-09-01 北京 闖紅燈 1002

3 2 2020-10-12 上海 超速50% 1003

4 2 2020-10-20 大連 占用應急車道 1004

5 1 2020-09-30 深圳 逆行 1002

執行插入語句

clickhouse-client --query "insert into test1.events format tsv" --max_insert_block_size=100000 < e
clickhouse客戶端有許多需要調整的設定,如我們在匯入資料的時候指定–max_insert_block_size=100000,檢視預設設定可以查詢system.setting表,包括沒有設定的預設值,如

[root@localhost ~]

# clickhouse-client --query "select name,value,changed,description from system.settings where name like '%max_insert_block%' "

max_insert_block_size 1048545 0 the maximum block size for insertion, if we control the creation of blocks for insertion.

可以在匯入後優化表,使用mergetree引擎的表會在後台合併資料部分優化資料儲存,下面這個語句促使引擎立即進行優化,而不是稍後

clickhouse-client --query "optimize table test1.events final"
例如查詢每月發生的次數,如下圖。

[root@localhost ~]

# clickhouse-client --query "select count(1),tomonth(eventdate) as month from test1.events group by month format tsv"

2 93 10

(完)(^_^)

clickhouse 列式儲存資料庫介紹

clickhouse介紹 俄羅斯最大的搜尋公司yandex,在clickhouse的配置檔案中我們也會看到yandex的影子。相對行式資料庫,像mysql oracle sqlserver等都是行式儲存,是把同一行的資料放到相鄰同一資料塊種,而列式儲存是把同一列的資料放到相鄰同一資料塊種,這樣在進行...

列式儲存 一

最近做專案,客戶要求物件的屬性能夠動態新增,於是採用了列式儲存。1.傳統關係型資料庫的行式儲存方法為 資料庫表的字段表示物件屬性,一行資料完整的表示物件的所有屬性。如果要新增乙個屬性,如 聯絡郵箱 那麼就要重新設計表,增加一欄 email 相應的後台 也需要變動。2.關係型資料庫的行式儲存方法為 將...

列式儲存處理

下面以gbase 8a分析型資料庫為例,描述列儲存對資料儲存與管理的作用。面對海量資料分析的 i o 瓶頸,gbase 8a 把錶資料按列的方式儲存,其優勢體現在以下幾個方面。不讀取無效資料 降低 i o 開銷,同時提高每次 i o 的效率,從而大大提高查詢效能。查詢語句只從磁碟上讀取所需要的列,其...