Clickhouse库引擎介绍
官網資料:
clickhouse和mysql一樣提供了眾多功能不同的引擎。
默認情況下,ClickHouse使用自身的數據庫引擎,該引擎可以提供表引擎配置(?table engines?)和SQL(SQL dialect.)
您還可以使用以下數據庫引擎:
-
MySQL
-
Lazy
MySQL引擎
允許連接到遠程MySQL服務器上的數據庫,并執行INSERT和SELECT查詢以在ClickHouse和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?—遠程數據庫名稱。
- user?— MySQL用戶。
- password?- 用戶密碼。
數據類型支持
| UNSIGNED TINYINT | UInt8 |
| TINYINT | Int8 |
| UNSIGNED SMALLINT | UInt16 |
| SMALLINT | Int16 |
| UNSIGNED INT, UNSIGNED MEDIUMINT | UInt32 |
| INT, MEDIUMINT | Int32 |
| UNSIGNED BIGINT | UInt64 |
| BIGINT | Int64 |
| FLOAT | Float32 |
| DOUBLE | Float64 |
| DATE | Date |
| DATETIME, TIMESTAMP | DateTime |
| BINARY | FixedString |
所有其他MySQL數據類型都轉換為String。
支持Nullable。
使用例子
MySQL中的表:
mysql> USE test; Database changedmysql> 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 │ └────────┴───────┘Lazy引擎
在最后一次訪問之后,僅在expiration_time_in_seconds秒內將表保留在RAM中。只有Log引擎的表可以使用。
該引擎針對存儲很多小型Log引擎表的情況進行了優化。因為對于這些表而言,兩次訪問之間的時間間隔很長。
創建數據庫
CREATE DATABASE testlazy ENGINE = Lazy(expiration_time_in_seconds);?
?
參考資料:https://clickhouse.tech/docs/en/engines/database-engines/
?
但是除了官網資料給出的三種clickhouse庫引擎外,《ClickHouse原理解析與應用實踐》一書中給了五種:Ordinary/Dictionary/Memory/Mysql/Lazy
Ordinary
也就是默認引擎,使用時無需在建庫時刻意聲明,在此數據庫下的表可以使用任意的類型的表引擎。官網中也有介紹。
可見默認引擎是ordinary。
MySQL
MySQL 引擎,會自動拉取遠端 MySQL 中的數據,并在該庫下創建 MySQL 表引擎的數據表。官網中也有介紹。
Lazy
日志引起,在該數據庫下只能創建 log 系列引擎的表。官網中也有介紹。
上次訪問之后expiration_time_in_seconds秒之前,表放內存.該庫引擎下只能創建?*Log表引擎
Dictionary
字典引擎,此類數據庫會自動為所有數據字典創建它們的數據表(加載配置文件中配置的字段表信息和數據)
Memory
內存引擎,用戶存放臨時數據,數據只會在內存中,不會涉及任何磁盤操作,當服務重啟后數據會清空。并且對表引擎也有限制,只能使用memory類型表引擎。
所有數據只會保存在內存中,服務重啟數據消失.
由上可見,該數據庫引擎只能夠創建Memory引擎表.
重啟服務后,數據庫還在,表已經消失了.
?
?
參考資料:
https://blog.csdn.net/qq_28603127/article/details/109294061
https://www.cnblogs.com/DBArtist/p/clickhouse_Engines.html
?
總結
以上是生活随笔為你收集整理的Clickhouse库引擎介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 思科ccie网络工程师一定要里了解的网络
- 下一篇: GameBuilder游戏开发系列之见缝