数据库入门与列式存储 | 青训营笔记

117 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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、比如数据仓库业务,这类型的表上会做大量的汇聚计算,且涉及到的列操作较少,关联,分组操作较多)。即时查询(查询条件不确定,行存表扫描难以使用索引)