Skip to content

1.ck底层数据目录分布

基于23讲解

数据库本质上就是一个由各种子目录和文件组成的文件目录。clickhouse默认数据目录

在/var/lib/clickhouse/data目录中。所有的数据库都会在该目录中创建一个子文件夹

1.1查看目录

[root@kubeadm-master01 clickhouse]# ll

总用量 8
drwxr-x---  2 clickhouse clickhouse 116 10月 25 15:20 access
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 cores
drwxr-x---  5 clickhouse clickhouse  52 10月 30 14:11 data
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 dictionaries_lib
drwxr-x---  2 clickhouse clickhouse  30 11月  7 12:06 flags
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 format_schemas
drwxr-x---  2 clickhouse clickhouse 170 11月  9 09:56 metadata
drwxr-x---  2 clickhouse clickhouse   6 11月  7 12:10 metadata_dropped
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 named_collections
drwxr-x---  2 clickhouse clickhouse  41 10月 25 15:20 preprocessed_configs
drwxr-xr-x  6 clickhouse clickhouse 156 11月  7 12:01 shadow
-rw-r-----  1 clickhouse clickhouse  58 11月  9 09:45 status
drwxr-x--- 12 clickhouse clickhouse 116 11月  7 12:10 store
drwxr-x---  2 clickhouse clickhouse   6 11月  9 09:44 tmp
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 user_defined
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 user_files
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 user_scripts
-rw-r-----  1 clickhouse clickhouse  36 10月 25 15:20 [uuid]()
总用量 8
drwxr-x---  2 clickhouse clickhouse 116 10月 25 15:20 access
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 cores
drwxr-x---  5 clickhouse clickhouse  52 10月 30 14:11 data
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 dictionaries_lib
drwxr-x---  2 clickhouse clickhouse  30 11月  7 12:06 flags
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 format_schemas
drwxr-x---  2 clickhouse clickhouse 170 11月  9 09:56 metadata
drwxr-x---  2 clickhouse clickhouse   6 11月  7 12:10 metadata_dropped
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 named_collections
drwxr-x---  2 clickhouse clickhouse  41 10月 25 15:20 preprocessed_configs
drwxr-xr-x  6 clickhouse clickhouse 156 11月  7 12:01 shadow
-rw-r-----  1 clickhouse clickhouse  58 11月  9 09:45 status
drwxr-x--- 12 clickhouse clickhouse 116 11月  7 12:10 store
drwxr-x---  2 clickhouse clickhouse   6 11月  9 09:44 tmp
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 user_defined
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 user_files
drwxr-x---  2 clickhouse clickhouse   6 10月 25 15:20 user_scripts
-rw-r-----  1 clickhouse clickhouse  36 10月 25 15:20 [uuid]()

1.介绍

目录作用
data数据存储路径
metadata数据库元数据路径,该目录下的文件是表结构信息
store存储表数据
access访问控制配置文件,对用户、角色、权限的定义,决定了哪些用户能够执行哪些操作
cores核心数据库引擎的文件和资源
dictionaries_lib字典机制允许用户将外部数据源(如文件、数据库、HTTP 服务等)作为外部字典引入到 ClickHouse 查询中
flags与表的元数据和配置有关,常见标志、Merge、Write、Compression
format_schemas用于存储和处理 ClickHouse 表的不同数据格式方案
metadata_dropped用于存储被删除的表和列的元数据
named_collections用于存储和管理命名集合类型(如 ArrayTupleMap)的相关功能和数据结构
preprocessed_configs存放经过预处理的配置文件
shadow存储查询执行期间的临时数据
status(file)记录ck进程pid和启动时间以及版本号
tmp
user_defined指定自定义模块路径
user_files通常用于存储用户上传的文件
user_scripts存放用户自定义的脚本文件
uuid全局唯一的标识符

metadata_dropped:

主要作用:

  1. 数据恢复:如果用户不小心删除了表或列,metadata_dropped 目录提供了一定的恢复可能性,因为这些元数据还没有被永久删除。
  2. 优化删除操作:直接删除大表或列可能会导致磁盘IO的高峰,而将元数据移入 metadata_dropped 目录,使得系统可以延迟实际的物理删除操作,避免性能问题。
  3. 追踪历史:通过 metadata_dropped,可以追踪到曾经存在但已经删除的表和列的历史信息。对于审计和管理操作很有帮助

preprocessed_configs:

1.调试和故障排除:如果在使用过程中遇到配置问题,查看 preprocessed_configs 目录中的文件可以帮助管理员确定哪些配置已经被加载并被应用,这对排查配置错误或不一致性非常有用

shadow:

查询执行期间的数据临时存储:当进行某些操作时,ClickHouse 会将中间结果写入 shadow 目录,保证查询能正确执行。

避免对主表数据的直接修改:操作过程中产生的临时数据不会直接修改原始数据表,这样可以降低数据损坏的风险。

提高查询性能:通过将中间结果存储在 shadow 目录中,ClickHouse 能够避免频繁访问原始数据,提升查询效率。

status:

PID: 1318
Started at: 2024-11-09 09:45:06
Revision: 54481
PID: 1318
Started at: 2024-11-09 09:45:06
Revision: 54481

1.2表文件结构组成

1.创建库

sql
create database test;
create database test;

2.创建表

sql
create table test.t_student
(
    id int,
    name String,
    age int,
    `heigth` int
)
engine = TinyLog;
create table test.t_student
(
    id int,
    name String,
    age int,
    `heigth` int
)
engine = TinyLog;

字段类型、表引擎区分大小写

3.查看

sql
select * from system.databases where name = 'test' format Vertical;

SELECT *
FROM system.databases
WHERE name = 'test'
FORMAT Vertical

Query id: d2a445db-f2a8-419c-a9fe-82fd18eb076d

Row 1:
──────
name:          test
engine:        Atomic
data_path:     /var/lib/clickhouse/store/
metadata_path: /var/lib/clickhouse/store/24c/24c8503c-8d69-4279-8dba-06894e5a7573/
uuid:          24c8503c-8d69-4279-8dba-06894e5a7573
engine_full:   Atomic
comment:
select * from system.databases where name = 'test' format Vertical;

SELECT *
FROM system.databases
WHERE name = 'test'
FORMAT Vertical

Query id: d2a445db-f2a8-419c-a9fe-82fd18eb076d

Row 1:
──────
name:          test
engine:        Atomic
data_path:     /var/lib/clickhouse/store/
metadata_path: /var/lib/clickhouse/store/24c/24c8503c-8d69-4279-8dba-06894e5a7573/
uuid:          24c8503c-8d69-4279-8dba-06894e5a7573
engine_full:   Atomic
comment:
  • data_path:数据存储路径
  • metadata_path:数据库元数据路径,该目录下的文件是表结构信息
  • uuid:uuid 是存储目录的一部分
bash
#进入到数据库目录下
cd /var/lib/clickhouse/data/test

#进入到表目录下
[root@kubeadm-master01 test]# ll
/var/lib/clickhouse/store/af2/af2d1669-0478-4603-afbb-61b28e295a1e/

#查看,这个里面存放了以表结构形式存放数据
[root@kubeadm-master01 t_student]# ll
总用量 20
-rw-r----- 1 clickhouse clickhouse  30 11  9 11:32 age.bin
-rw-r----- 1 clickhouse clickhouse  30 11  9 11:32 heigth.bin
-rw-r----- 1 clickhouse clickhouse  30 11  9 11:32 id.bin
-rw-r----- 1 clickhouse clickhouse  33 11  9 11:32 name.bin
-rw-r----- 1 clickhouse clickhouse 123 11  9 11:32 sizes.js
#进入到数据库目录下
cd /var/lib/clickhouse/data/test

#进入到表目录下
[root@kubeadm-master01 test]# ll
/var/lib/clickhouse/store/af2/af2d1669-0478-4603-afbb-61b28e295a1e/

#查看,这个里面存放了以表结构形式存放数据
[root@kubeadm-master01 t_student]# ll
总用量 20
-rw-r----- 1 clickhouse clickhouse  30 11  9 11:32 age.bin
-rw-r----- 1 clickhouse clickhouse  30 11  9 11:32 heigth.bin
-rw-r----- 1 clickhouse clickhouse  30 11  9 11:32 id.bin
-rw-r----- 1 clickhouse clickhouse  33 11  9 11:32 name.bin
-rw-r----- 1 clickhouse clickhouse 123 11  9 11:32 sizes.js

💡 说明

.bin 就是各个列存储的数据

sizes.js 存放表的大小