关于clickhouse:ClickHouse07ClickHouse数据库引擎解析

9次阅读

共计 5189 个字符,预计需要花费 13 分钟才能阅读完成。

这里会介绍 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 经典中文文档分享

参考文章

  • ClickHouse(01)什么是 ClickHouse,ClickHouse 实用于什么场景
  • ClickHouse(02)ClickHouse 架构设计介绍概述与 ClickHouse 数据分片设计
  • ClickHouse(03)ClickHouse 怎么装置和部署
  • ClickHouse(04)如何搭建 ClickHouse 集群
  • ClickHouse(05)ClickHouse 数据类型详解
  • ClickHouse(06)ClickHouse 建表语句 DDL 具体解析
正文完
 0