ClickHouse(07)ClickHouse資料庫引擎解析

来源:https://www.cnblogs.com/the-pig-of-zf/archive/2022/10/09/16771673.html
-Advertisement-
Play Games

這裡會介紹ClickHouse幾種資料庫引擎,已經對應的特點和應用的場景。資料庫引擎允許您處理數據表。預設情況下,ClickHouse使用Atomic資料庫引擎。它提供了可配置的table engines和SQL dialect。 目前的資料庫引擎: MySQL MaterializeMySQL L ...


目錄

這裡會介紹ClickHouse幾種資料庫引擎,已經對應的特點和應用的場景。資料庫引擎允許您處理數據表。預設情況下,ClickHouse使用Atomic資料庫引擎。它提供了可配置的table engines和SQL dialect。

目前的資料庫引擎:

  • MySQL
  • MaterializeMySQL
  • Lazy
  • Atomic
  • PostgreSQL
  • MaterializedPostgreSQL
  • Replicated
  • SQLite

Atomic

支持非阻塞的DROP TABLE和RENAME TABLE查詢和原子的EXCHANGE TABLES t1 AND t2查詢。預設情況下使用Atomic資料庫引擎。

建表語句

  CREATE DATABASE test[ ENGINE = Atomic];

特性

Table UUID

資料庫Atomic中的所有表都有唯一的UUID,並將數據存儲在目錄/clickhouse_path/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/,其中xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy是該表的UUID。

通常,UUID是自動生成的,但用戶也可以在創建表時以相同的方式顯式指定UUID(不建議這樣做)。例如:

CREATE TABLE name UUID '28f1c61c-2970-457a-bffe-454156ddcfef' (n UInt64) ENGINE = ...;

RENAME TABLES

RENAME查詢是在不更改UUID和移動表數據的情況下執行的。這些查詢不會等待使用表的查詢完成,而是會立即執行。

DROP/DETACH TABLES

在DROP TABLE上,不刪除任何數據,資料庫Atomic只是通過將元數據移動到/clickhouse_path/metadata_dropped/將表標記為已刪除,並通知後臺線程。最終表數據刪除前的延遲由database_atomic_delay_before_drop_table_sec設置指定。

可以使用SYNC修飾符指定同步模式。使用database_atomic_wait_for_drop_and_detach_synchronously設置執行此操作。

EXCHANGE TABLES

EXCHANGE以原子方式交換表。

-- 非原子操作
RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table;

--原子操作
EXCHANGE TABLES new_table AND old_table;

ReplicatedMergeTree in Atomic Database

對於ReplicatedMergeTree表,建議不要在ZooKeeper和副本名稱中指定engine-path的參數。在這種情況下,將使用配置的參數default_replica_path和default_replica_name。

如果要顯式指定引擎的參數,建議使用{uuid}巨集。這是非常有用的,以便為ZooKeeper中的每個表自動生成唯一的路徑。

MySQL

MySQL引擎用於將遠程的MySQL伺服器中的表映射到ClickHouse中,並允許您對錶進行INSERT和SELECT查詢,以方便您在ClickHouse與MySQL之間進行數據交換。

MySQL資料庫引擎會將對其的查詢轉換為MySQL語法併發送到MySQL伺服器中,因此您可以執行諸如SHOW TABLES或SHOW CREATE TABLE之類的操作。

但無法對其執行操作:RENAME、CREATE TABLE和ALTER。

創建資料庫

CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')

引擎參數

  • host:port — MySQL服務地址
  • database — MySQL資料庫名稱
  • user — MySQL用戶名
  • password — MySQL用戶密碼

mysql與ClickHouse數據類型對應

MySQL ClickHouse
UNSIGNED TINYINT UInt8
TINYINT Int8
UNSIGNED SMALLINT UInt16
SMALLINT Int16
UNSIGNED INT UInt32
UNSIGNED MEDIUMINT UInt32
INT,MEDIUMINT Int32
UNSIGNED BIGINT UInt64
BIGINT Int64
FLOAT Float32
DOUBLE Float64
DATE Date
DATETIME,TIMESTAMP DateTime
BINARY FixedString

其他的MySQL數據類型將全部都轉換為String。

使用例子

MySQL操作:

mysql> USE test;
Database changed

mysql> CREATE TABLE `mysql_table` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `float` FLOAT NOT NULL,
    ->   PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)

mysql> select * from mysql_table;
+------+-----+
| int_id | value |
+------+-----+
|      1 |     2 |
+------+-----+
1 row in set (0,00 sec)

ClickHouse中的資料庫,與MySQL伺服器交換數據:

CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')

SHOW DATABASES

┌─name─────┐
│ default  │
│ mysql_db │
│ system   │
└──────────┘

SHOW TABLES FROM mysql_db

┌─name─────────┐
│  mysql_table │
└──────────────┘

SELECT * FROM mysql_db.mysql_table

┌─int_id─┬─value─┐
│      1 │     2 │
└────────┴───────┘

INSERT INTO mysql_db.mysql_table VALUES (3,4)

SELECT * FROM mysql_db.mysql_table

┌─int_id─┬─value─┐
│      1 │     2 │
│      3 │     4 │
└────────┴───────┘

PostgreSQL

允許連接到遠程PostgreSQL服務。支持讀寫操作(SELECT和INSERT查詢),以在ClickHouse和PostgreSQL之間交換數據。

在SHOW TABLES和DESCRIBE TABLE查詢的幫助下,從遠程PostgreSQL實時訪問表列表和表結構。

支持表結構修改(ALTER TABLE ... ADD|DROP COLUMN)。如果use_table_cache參數(參見下麵的引擎參數)設置為1,則會緩存表結構,不會檢查是否被修改,但可以用DETACH和ATTACH查詢進行更新。

使用總體上與mysql引擎類似

創建資料庫

CREATE DATABASE test_database 
ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `use_table_cache`]);

引擎參數

  • host:port — PostgreSQL服務地址
  • database — 遠程資料庫名次
  • user — PostgreSQL用戶名稱
  • password — PostgreSQL用戶密碼
  • schema - PostgreSQL 模式
  • use_table_cache — 定義資料庫表結構是否已緩存或不進行。可選的。預設值: 0

數據類型對應

PostgreSQL ClickHouse
DATE Date
TIMESTAMP DateTime
REAL Float32
DOUBLE Float64
DECIMAL Decimal
NUMERIC Decimal
SMALLINT Int16
INTEGER Int32
BIGINT Int64
SERIAL UInt32
BIGSERIAL UInt64
TEXT String
CHAR String
INTEGER Nullable(Int32)
ARRAY Array

SQLite

允許連接到SQLite資料庫,並支持ClickHouse和SQLite交換數據, 執行INSERT和SELECT查詢。

SQLite將整個資料庫(定義、表、索引和數據本身)存儲為主機上的單個跨平臺文件。在寫入過程中,SQLite會鎖定整個資料庫文件,因此寫入操作是順序執行的。讀操作可以是多任務的。SQLite不需要服務管理(如啟動腳本)或基於GRANT和密碼的訪問控制。訪問控制是通過授予資料庫文件本身的文件系統許可權來處理的。

創建資料庫

    CREATE DATABASE sqlite_database 
    ENGINE = SQLite('db_path')

引擎參數

  • db_path — SQLite 資料庫文件的路徑

數據類型對應

SQLite ClickHouse
INTEGER Int32
REAL Float32
TEXT String
BLOB String

Lazy

在最後一次訪問之後,只在RAM中保存expiration_time_in_seconds秒。只能用於Log表。

它是為存儲許多小的Log表而優化的,對於這些表,訪問之間有很長的時間間隔。

創建資料庫

    CREATE DATABASE testlazy ENGINE = Lazy(expiration_time_in_seconds);

Replicated

該引擎基於Atomic引擎。它支持通過將DDL日誌寫入ZooKeeper併在給定資料庫的所有副本上執行的元數據複製。

一個ClickHouse伺服器可以同時運行和更新多個複製的資料庫。但是同一個複製的資料庫不能有多個副本。

這是一個實驗性的引擎,不應該在生產中使用。

創建資料庫

    CREATE DATABASE testdb ENGINE = Replicated('zoo_path', 'shard_name', 'replica_name') [SETTINGS ...]

MaterializeMySQL

創建ClickHouse資料庫,包含MySQL中所有的表,以及這些表中的所有數據。

ClickHouse伺服器作為MySQL副本工作。它讀取binlog並執行DDL和DML查詢。

這是一個實驗性的引擎,不應該在生產中使用。

創建資料庫

CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MaterializeMySQL('host:port', ['database' | database], 'user', 'password') [SETTINGS ...]

MaterializedPostgreSQL

使用PostgreSQL資料庫表的初始數據轉儲創建ClickHouse資料庫,並啟動複製過程,即執行後臺作業,以便在遠程PostgreSQL資料庫中的PostgreSQL資料庫表上發生新更改時應用這些更改。

ClickHouse伺服器作為PostgreSQL副本工作。它讀取WAL並執行DML查詢。DDL不是複製的,但可以處理(如下所述)。

這是一個實驗性的引擎,不應該在生產中使用。

創建資料庫

CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MaterializedPostgreSQL('host:port', ['database' | database], 'user', 'password') [SETTINGS ...]

資料分享

ClickHouse經典中文文檔分享

參考文章

本文來自博客園,作者:張飛的豬,轉載請註明原文鏈接:https://www.cnblogs.com/the-pig-of-zf/p/16771673.html

作者公眾號:張飛的豬大數據分享,不定期分享大數據學習的總結和相關資料,歡迎關註。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 索引數組 一、什麼是索引數組? 所謂索引數組就是普通數組,以整數作為數組元素的索引下標。 二、實例。 備註: (a)使用-a選項定義索引數組,使用一對小括弧()定義數組中的元素列表。 (b)索引數組使用整數作為數組元素下標。 備註: (a)使用@和*作為數組下標,表示獲取所有元素。 三、實例。 ...
  • keepalived高可用(nginx) keepalived簡介 keepalived官網 Keepalived 軟體起初是專為LVS負載均衡軟體設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟體外, ...
  • 在應用開發的早期,數據量少,開發人員開發功能時更重視功能上的實現,隨著生產數據的增長,很多SQL語句開始暴露出性能問題,對生產的影響也越來越大,有時可能這些有問題的SQL就是整個系統性能的瓶頸。 ...
  • 1)對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2)應儘量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。 3)應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引 ...
  • 存儲引擎 1.基本介紹 基本介紹 MySQL的表類型由存儲引擎(Storage Engines)決定,主要包括MyISAM、innoDB、Memory等 MySQL數據表主要支持六種類型,分別是:CSV,Memory,ARCHIVE,MRG_MYISAM,MYISAM,InnoBDB。 這六種又分為 ...
  • 本期我們帶大家回顧一下無倦同學的直播分享《ChunJun類載入器隔離》,ChunJun類載入器隔離的方案是我們近期探索的一個新方案,這個方案目前還不是非常成熟,希望能藉由此次分享與大家一起探討下這方案,如果大家有一些新的想法歡迎大家在github上給我提issue或者pr。 一、Java 類載入器解 ...
  • 摘要:GaussDB(for Redis)推出了雙活解決方案,基於GaussDB NoSQL統一架構,通過兩個資料庫實例之間的數據同步,達成數據的一致性。 本文分享自華為雲社區《【雲圖說】一張圖瞭解GaussDB(for Redis)雙活解決方案》,作者: 高斯Redis官方博客。 網路異常、電力故 ...
  • 摘要:本文從零開始引導與大家一起學習圖知識。希望大家可以通過本教程學習如何使用圖資料庫與圖計算引擎。本篇將以華為雲圖引擎服務來輔助大家學習如何使用圖資料庫與圖計算引擎。 本文分享自華為雲社區《從零開始學Graph Database(1)》,作者:弓乙 。 基礎概念 什麼是圖? 首先,我們需要明確圖 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...