跳转至

引言

  • DBS, DataBase System 数据库系统,即 DBMS + DBA
    • DBA, DataBase Administrator 数据库管理人员
    • DBMS, DataBase Management System 数据库管理系统,即 DB + 管理程序
      • DB, DataBase 数据库,存储数据的集合,即多个数据表

DBMS 排名:https://db-engines.com/en/ranking

根据数据模型分类

  • 关系 RDBMS
  • 非关系 NoSQL

根据处理类型

  • OLTP 在线事务处理,适用于管理日常事务的数据库,比如 MySQL
  • OLAP 在线分析处理,适用于数据分析和复杂查询的数据库,比如 Hive

关系型数据库

RDBMS 建立在实体-关系图(Entity Relationship Diagram, ER)的基础上

ER 图三要素:实体、属性、关系

常见的 RDBMS

都是采用的行式存储(Row-based)

  • Oracle 1979,第一个商用的 RDBMS,流行后其公司也改名为 Oracle(甲骨文)
  • SQL Server 1989,微软开发的商业数据库
  • MySQL 1995,开源,MySQL AB 公司创造,然后被 SUN 收购,最后被 Oracle 收购,原创者担心被闭源,然后分支出了 MariaDB
  • SQLite 2000,非 C/S 结构的嵌入式数据库,应该是世界上使用最多的数据库,虽然开源但不接受 PR,属于并用于公共领域
  • PostgreSQL 企业级开源数据库,适合处理大量复杂查询和数据处理需求
  • Snowflake 云原生的数据库存储,适合需要高效、灵活的数据存储和分析能力的企业
  • Hive 建立在Hadoop之上的数据仓库基础设施

结构化查询语言 SQL

SQL, Structured Query Language

SQL 是 DBA 与 DBMS 交互的语言,属于一种特定领域专用语言(Domain Specific Language, DSL)

按照功能 SQL 可划分为

  • 数据控制语言 DCL(Data Control Language),用于操作访问权限和安全级别。
  • 数据定义语言 DDL(Data Definition Language),用于定义数据库、数据表、列等数据库对象,创建、删除、修改数据库和表结构。
  • 数据操作语言 DML(Data Manipulation Language),用于增加、删除、修改表中的记录。
  • 数据查询语言 DQL(Data Query Language),用于查询想要的记录,最重要的部分。

语法规范

不同 DBMS 有各自的方言,比如大小写不统一

而且同一 DBMS 在不同系统上可能还不一样,比如 MySQL 在 Linux 环境下,数据库名、表名、变量名是严格区分大小写的,而字段名是忽略大小写的,而在 Windows 环境下全部不区分大小写。

所以建议养成习惯

  • SQL 保留字、函数名、绑定变量等都大写
  • 表名、表别名、字段名、字段别名等都小写
  • 字段名以下划线命名

非关系型数据库

NoSQL 泛指非关系型数据库,并没有统一的架构和标准语言

之所以出现 NoSQL 是因为随着数据规模越来越大,关系型数据库无法满足快速查询和插入数据的需求

NoSQL 通过降低数据的安全性,减少对事务和复杂查询的支持,以此获取性能上的提升

但随着数据库不断地发展,发现越来越离不开 SQL,所以现在 NoSQL 的 DBMS 也会实现类似 SQL 的功能,而 NoSQL 的含义也以在不断改变

1970:NoSQL = We have no SQL
1980:NoSQL = Know SQL
2000:NoSQL = No SQL!
2005:NoSQL = Not only SQL
2013:NoSQL = No, SQL!

每种数据库之间差异较大,各有所长,常见的非关系性数据库有以下几种

键值型数据库 Key-value

  • Redis
  • Memcached

键值型数据库通过 Key-Value 键值的方式来存储数据,其中 Key 和 Value 可以是简单的对象,也可以是复杂的对象。

Key 作为唯一的标识符,优点是查找速度快,在这方面明显优于关系型数据库,同时缺点也很明显,它无法像关系型数据库一样自由使用条件过滤(比如 WHERE),如果你不知道去哪里找数据,就要遍历所有的键,这就会消耗大量的计算。

应用场景:内容缓存、用户信息比如会话、配置信息、购物车等,主要用于处理大量数据的高访问负载。

文档型数据库 Document

  • MongoDB

文档型数据库,最像 RDBMS 的 NoSQL,以文档的形式储存,类似 JSON,是一系列数据项的集合,一个文档就相当于一条记录。

应用场景:日志、 Web 应用等

列存储 Wide column

  • Cassandra
  • Hbase

列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的 I/O,适合于分布式文件系统,不足在于功能相对有限。

应用场景:日志、 分布式的文件系统(对象存储)、推荐画像、时空数据、消息/订单等。

图形数据库 Graph

  • Neo4j

图形数据库,利用了图这种数据结构存储了实体对象之间的关系。

最典型的例子就是社交网络中人与人的关系,数据模型主要是以节点和边(关系)来实现,特点在于能高效地解决复杂的关系问题。

应用场景:社交网络,推荐系统等,专注于构建关系图谱。

搜索引擎 Search engine

  • Elasticsearch
  • Splunk
  • Solr

搜索引擎也是数据库检索中的重要应用。

虽然关系型数据库采用了索引提升检索效率,但是针对全文索引效率却较低,搜索引擎的优势在于采用了全文搜索的技术,核心原理是倒排索引。

时间序列 Time Series

  • Kdb
  • InfluxDB
  • Graphite
  • Prometheus

一种针对处理时间序列数据进行优化的数据库管理系统,每个条目都与一个时间戳相关联,旨在高效收集、存储和查询高交易量的各种时间序列。

提供了一种类似 SQL 的查询语言,称为 InfluxQL

评论