ClickHouse|青训营笔记

126 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 9 天

数据库

定义

数据库是结构化信息或数据的数据集合,以电子形式存储在计算机系统中,通常由DBMS管理。通常把DBMS、数据以及关联应用称为数据库系统,简称数据库。

数据库类型

数据库有很多种,至于各种数据库孰优孰劣,主要取决于企业希望如何使用数据。 从存储上:

  • 关系型数据库:关系型数据库是把数据以表的形式进行储存,然后再各个表之间建立关系,通过这些表之间的关系来操作不同表之间的数据。
  • 非关系型数据库:NoSQL 或非关系数据库,支持存储和操作非结构化及半结构化数据。相比于关系型数据库,NoSQL没有固定的表结构,且数据之间不存在表与表之间的关系,数据之间可以是独立的。NoSQL的关键是它们放弃了传统关系型数据库的强事务保证和关系模型,通过所谓最终一致性和非关系数据模型(例如键值对,图,文档)来提高Web应用所注重的高可用性和可扩展性。

从架构上:

  • 单机数据库:在一台计算机上完成数据的存储和查询的数据库系统。
  • 分布式数据库:分布式数据库由位于不同站点的两个或多个文件组成。数据库可以存储在多台计算机上,位于同一个物理位置,或分散在不同的网络上。

功能上:

  • OLTP 数据库:OLTP(Online transactional processing)数据库是一种高速分析数据库,专为多个用户执行大量事务而设计。
  • OLAP 数据库:OLAP (Online analytical processing) 数据库旨在同时分析多个数据维度,帮助团队更好地理解其数据中的复杂关系

ClickHouse中的数据库类型

整型

clickhouse不像其他数据库分为byte、short、int、long,而是统一的使用 int+数字 来代表不同范围的整型

  • int8 —— 范围[-128, 127]
  • int16 —— 范围[-32768, 32767]
  • int32 —— 范围[-2147483648, 2147483647]
  • int64 —— 范围[-263, 263-1]

还有无符号整型:

  • Unit8 —— 范围[0, 28 - 1]
  • Unit16 —— 范围[0, 216 - 1]
  • Unit32 —— 范围[0, 232 - 1]
  • Unit64 —— 范围[0, 264 - 1]

布尔类型

clickhouse中并没有使用true和false,而是直接使用Unit8

浮点型

  • Float32 —— float
  • Float64 —— double

这种浮点型精度是会有丢失的,不适合要求高精度的场景。

Decimal类型

有符号的浮点类型,在加减乘的情况下可以保持精度,对于除法会将最低有效数字进行丢弃。Decimal有三种范围可选择:

  • Decimal32
  • Decimal64
  • Decimal128

其中Decimal128在目前的CPU中并没有支持,因此是采用软件进行的模拟,一般不要使用Decimal128.

字符类型

clickhouse直接使用 String 来简化字符类型的声明,可表示任意长度的字符串、可以包含任意的字符集和空字节。

还有一个 FixedString(N) 来规定固定长度的字符串,例如存储手机号码、IP地址之类定长的数据。

枚举类型

  • Enum8
  • Enum16

Enum保存 'String'=Integer的对应类型。

时间类型

  • Data —— 格式 年-月-日
  • Datatime —— 格式 年-月-日 时:分:秒
  • Datatime64 —— 格式 年-月-日 时:分:秒.毫秒

可空类型

绝大部分的基础类型前可添加一个 Nullable() 来表示该属性可接受空值,例如Nullable(Int8)。