这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
数据库
基本概念
数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。
通常由数据库管理系统(DBMS)来控制。在现实中,数据、DBMS以及关联应用一起被称为数据库系统。
数据库系统可以简称为数据库
数据库类型
关系型数据库
把数据以表的形式进行储存,然后再在各个表之间建立关系,通过这些表之间的关系来操作不同表之间的数据
非关系型数据库
NoSQL或非关系型数据库,支持存储和操作非结构化及半结构化数据。
相比于关系型数据库,NoSQL没有固定的表结构,且数据之间不存在表与表之间的关系,数据之间可以是独立的
单机数据库
在一台计算机上完成数据的存储和查询的数据库系统
分布式数据库
分布式数据库由位于不同站点的两个或多个文件组成。
数据库可以储存在多台计算机上,位于同一个物理位置,或分散在不同的网络上。
OLTP数据库
OLTP(Online Transactional Processing)数据库是一种高速分析数据库,专为多个用户执行大量事务而设计。
OLAP数据库
OLAP(Online Analytical Processing)数据库旨在同时分析多个数据维度,帮助团队更好的理解数据的复杂关系
优点
- 大量数据的读写,PB级别的存储
- 多维分析,复杂的聚合函数
- 窗口函数,自定义UDF(User Define Function)
- 支持离线/实时分析
SQL
SQL是一种编程语言,目前几乎所有的关系数据库都使用SQL来查询、操作和定义数据
SQL的全称:Structured Query Language)
SQL的优势
- 标准化,ISO和ANSI是长期建立使用的SQL数据库标准
- 高度非过程化:使用SQL,用户只需要提出“做什么”,而不必指明“怎么做”,因此用户无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这大大的减轻了用户负担,同时有利于提高数据独立性。
- 多使用方式:以一种语法结构提供两种使用方式,用户可以在终端上直接输入SQL命令对数据库进行操作。作为嵌入式语言,SQL语句能够嵌入到高级语言,例如C、C#、Java中,供程序员设计程序时使用。在两种不同的使用方式下,SQL的语法结构基本上是一致的
- 简单上手:SQL功能极强,但是由于设计巧妙,语言简洁,完成数据定义、数据操作、数据控制的核心功能只有9个动词:create/alter/drop/select/insert/update/delete/grant/revoke。而且SQL语法简单,接近英语口语。
列式存储
概念
有列就有行(不是
实际上在一般的数据库中,我们通常是行式存储
以开发中常见的id开头的数据库,我们就是根据一个id一个id来提取出这个id的内容
所以,列存储就是取出来的是一列一列的()
优势
数据压缩
- 使读取的数据量更少,在IO密集型计算中获得更大的性能优势
- 相同类型压缩效率更高
- 排序之后压缩效率更高
- 可以针对不同类型使用不同的压缩算法
延时物化
- 缓存友好
- CPU/内存带宽友好
- 可以利用到执行计划和算子的优化,例如filter
- 保留直接在压缩列做计算的机会
列式存储与行式存储的对比
| 行存 | 列存 | ||
|---|---|---|---|
| 优势 | 数据保存在一起,便于insert/update | 查询时只有涉及到的列会被读取,投影(Projection)很高效,任何列都能作为索引,便于做延迟物化和向量化计算,同时压缩效率高,每一列可以使用不同的压缩算法 | |
| 劣势 | 选择(Selection)时即使只涉及某几列,所有数据也会被读取 | 选择完成时,被选择的列要重新组装,insert/update比较麻烦,同时不适合点查询 | |
| 适用场景 | 点查询(返回记录少,基于索引的简单查询),适合curd场景 | 统计分析类查询(OLAP、比如数据仓库业务,这类型的表上会做大量的汇聚计算,且涉及到的列操作较少,关联,分组操作较多)。即时查询(查询条件不确定,行存表扫描难以使用索引) |