登 录
注 册
< 数 据 库
MySQL
ClickHouse
ES
Doris
MongoDB
Redis
其他DB
ClickHouse介绍
单机部署
客户端访问
数据定义
MergeTree引擎
表引擎-外部存储
表引擎-内存类型
表引擎-其他类型
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
ClickHouse
>>
表引擎-内存类型
表引擎-内存类型
2020-10-07 20:01:43 星期三 阅读:6119
面向内存查询的方案:数据会从内存中被直接访问,所以它们被归纳为内存类型。但这并不意味着内存类表引擎不支持物理存储,事实上,除了Memory表引擎之外,其余的几款表引擎都会将数据写入磁盘,这是为了防止数据丢失,是一种故障恢复手段。而在数据表被加载时,它们会将数据全部加载至内存,以供查询之用。 将数据全量放在内存中,对于表引擎来说是一把双刃剑: 一方面,这意味着拥有较好的查询性能; 另一方面,如果表内装载的数据量过大,可能会带来极大的内存消耗和负担。 ####Memory表引擎 Memory表引擎直接将数据保存在内存中,数据既不会被压缩也不会被格式转换,数据在内存中保存的形态与查询时看到的如出一辙。 ``` CREATE TABLE memory_1 ( id UInt64 )ENGINE = Memory() ``` ####set表引擎 Set表引擎是拥有物理存储的,数据首先会被写至内存,然后被同步到磁盘文件中。所以当服务重启时,它的数据不会丢失,在Set数据结构中,所有元素都是唯一的。Set表引擎具有去重的能力,在数据写入的过程中,重复的数据会被自动忽略。 ``` CREATE TABLE set_1 ( id UInt8 )ENGINE = Set() ``` 不能直接使用SELECT对其进行查询,Set表引擎只能间接作为IN查询的右侧条件被查询使用。正确的查询方法应该是 `SELECT arrayJoin([1, 2, 3]) AS a WHERE a IN set_1` ####Join表引擎 Join表引擎可以说是为JOIN查询而生的,它等同于将JOIN查询进行了一层简单封装。Join表引擎有着更加广泛的应用场景,它既能够作为JOIN查询的连接表,也能够被直接查询使用。 建立一张主表 ``` CREATE TABLE join_tb1( id UInt8, name String, time Datetime ) ENGINE = Log ``` 建立一张Join表 ``` CREATE TABLE id_join_tb1( id UInt8, price UInt32, time Datetime ) ENGINE = Join(ANY, LEFT, id) ``` ANY表示连接精度 LEFT表示连接类型 id表示连接键 Join查询 `SELECT id,name,price FROM join_tb1 LEFT JOIN id_join_tb1 USING(id)` ####Buffer表引擎 Buffer表引擎完全使用内存装载数据,不支持文件的持久化存储,所以当服务重启之后,表内的数据会被清空。Buffer表引擎不是为了面向查询场景而设计的,它的作用是充当缓冲区的角色。假设有这样一种场景,我们需要将数据写入目标MergeTree表A,由于写入的并发数很高,这可能会导致MergeTree表A的合并速度慢于写入速度(因为每一次INSERT都会生成一个新的分区目录)。此时,可以引入Buffer表来缓解这类问题,将Buffer表作为数据写入的缓冲区。数据首先被写入Buffer表,当满足预设条件时,Buffer表会自动将数据刷新到目标表。 声明方式 ``` ENGINE = Buffer(database, table, num_layers, min_time, max_time, min_rows, max_rows, min_bytes, max_bytes) ```