目錄
前言
ClickHouse是一個用於聯機分析(OLAP)的列式數據庫管理系統(DBMS)。
OLAP場景的關鍵特徵
- 大多數是讀請求
- 數據總是以相當大的批(> 1000 rows)進行寫入
- 不修改已添加的數據
- 每次查詢都從數據庫中讀取大量的行,但是同時又僅需要少量的列
- 寬表,即每個表包含着大量的列
- 較少的查詢(通常每臺服務器每秒數百個查詢或更少)
- 對於簡單查詢,允許延遲大約50毫秒
- 列中的數據相對較小: 數字和短字符串(例如,每個URL 60個字節)
- 處理單個查詢時需要高吞吐量(每個服務器每秒高達數十億行)
- 事務不是必須的
- 對數據一致性要求低
- 每一個查詢除了一個大表外都很小
- 查詢結果明顯小於源數據,換句話說,數據被過濾或聚合後能夠被盛放在單臺服務器的內存中
缺陷
- 1.無事務處理。
- 2.缺乏全面的UPDATE / DELETE實現
參考:https://blog.csdn.net/asfjgvajfghaklsbf/article/details/85139888
一、集羣模式搭建
1、centos系統安裝
#集羣模式,每臺機器上都要執行
sudo yum install yum-utils
sudo rpm --import https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.yandex.ru/clickhouse/rpm/stable/x86_64
sudo yum install clickhouse-server clickhouse-client
官網教程:https://clickhouse.yandex/docs/zh/getting_started/
2、配置文件
每臺機器上都要執行
- 配置文件目錄: /etc/clickhouse-server
- 修改config.xml:在裏面添加一句:<include_from>/etc/clickhouse-server/metrika.xml</include_from>
- 在該目錄下添加一個文件:metrika.xml
<yandex>
<clickhouse_remote_servers>
<!-- 集羣名字 -->
<clickhouse_cluster>
<!-- 數據分片1 -->
<shard>
<!-- 寫入數據的權重 -->
<weight>1</weight>
<!-- 複製數據是否寫入全部副本false:全部 -->
<internal_replication>true</internal_replication>
<replica>
<host>hadoop001</host>
<port>9000</port>
<user>default</user>
<password>123456</password>
</replica>
</shard>
<!-- 數據分片2 -->
<shard>
<!-- 寫入數據的權重 -->
<weight>1</weight>
<!-- 複製數據是否寫入全部副本false:全部 -->
<internal_replication>true</internal_replication>
<replica>
<host>hadoop002</host>
<port>9000</port>
<user>default</user>
<password>123456</password>
</replica>
</shard>
<!-- 數據分片3 -->
<shard>
<!-- 寫入數據的權重 -->
<weight>1</weight>
<!-- 複製數據是否寫入全部副本 false:全部 -->
<internal_replication>true</internal_replication>
<replica>
<host>hadoop003</host>
<port>9000</port>
<user>default</user>
<password>123456</password>
</replica>
</shard>
</clickhouse_cluster>
</clickhouse_remote_servers>
<zookeeper-servers>
<node index="1">
<host>hadoop001</host>
<port>2181</port>
</node>
<node index="2">
<host>hadoop002</host>
<port>2181</port>
</node>
<node index="3">
<host>hadoop003</host>
<port>2181</port>
</node>
</zookeeper-servers>
</yandex>
3、啓動
每臺機器都要執行
啓動:
sudo service clickhouse-server start
關閉:
sudo service clickhouse-server stop
4、連接數據庫
1)終端下連接
clickhouse-client -h 127.0.0.1 --port 9000 -m -u default --password 123456
2)數據庫工具
推薦使用:DBeaver ,下載:https://dbeaver.io/download/
二、字段知識
參考官網:https://clickhouse.yandex/docs/zh/data_types/int_uint/
三、表知識
1、表引擎介紹
- ReplacingMergeTree() :主鍵去重,主鍵相同的數據,會有一個後臺線程去重,不同的節點上相同的主鍵不會去重,去重的時間是不確定的,不能實時的去重;
- MergeTree()主鍵不去重;
- Distributed()分佈式引擎,不存儲數據,可以關聯對應的物理表(存儲數據的表),在集羣模式中使用這個表引擎;
- AggregatingMergeTree() 聚合型表
2、集羣模式表用法
-- 創建物理表
CREATE TABLE IF NOT EXISTS operation.`store_cluster` ON CLUSTER clickhouse_cluster ( \
`id` UInt32 COMMENT 'ID',\
`storeID` Nullable(UInt16) COMMENT '門店ID',\
`goodsID` Nullable(UInt32) COMMENT '商品ID',\
`status` String DEFAULT 'A' COMMENT '關係狀態',\
`createTime` Nullable(datetime) COMMENT '創建時間',\
`lastUpdate` Nullable(datetime ) COMMENT '最後更新時間',\
`saleStatus` Nullable(String) COMMENT '門店銷售該商品的狀態',\
`stockBorder` Nullable(Int16) COMMENT '門店商品邊界值'\
) ENGINE ReplacingMergeTree() PARTITION BY toDate(lastUpdate) ORDER BY (id) SETTINGS index_granularity=8192 ;
-- operation爲數據庫
-- store_cluster爲物理表
-- clickhouse_cluster爲集羣的名字
-- ReplacingMergeTree爲表引擎
-- ORDER BY的字段,默認也是主鍵
-- 8192 分片大小
-- 創建邏輯表
CREATE TABLE store ON CLUSTER clickhouse_cluster AS operation.`store_cluster` \
ENGINE = Distributed(clickhouse_cluster, operation, `store_cluster`, rand());
-- store爲邏輯表,映射的是store_cluster這個物理表
--
-- Distributed的4個參數,分別是集羣名字、數據庫名、表名、分佈規則;
集羣模式下創建表,只用在一個節點上就可以,需要加上ON CLUSTER clickhouse_cluster這句,同樣集羣 刪除的話也可以加上這一句,在一個節點上操作,集羣上的每一個節點對應的表就會刪除,這個是集羣操作。
暴露給外部的只要一個邏輯表就可以了,一切的增刪改查都只能在邏輯表上,同時邏輯表也是一個集羣操作