数据库概述
山东外国语职业技术大学
⬇ 过程性成绩 (50%) 分数占比
从结绳记事到文件系统,数据如何存储?到底什么是数据库?
关系型数据库 (RDBMS) 称霸四十年。解密二维表与强大的 ACID 魔法。
当数据量爆炸,单机撑不住时怎么办?带你拆解现代分布式架构的核心!
大家平时都用过 Excel(或 WPS 表格)。
它也能建表格、存数据、还能搜索和筛选。
那么,如果把全校 2 万名学生的学籍和成绩,
或者全中国 14 亿人的微信好友名单全部存在 Excel 里,
你们认为,会发生什么可怕的灾难?
在计算机普及之前,人类用账本、卡片盒、甚至打孔卡来记录数据。
50年代,数据被存入磁带和硬盘。这就是文件系统 (File System) 时代。数据就像一堆 txt 文本文件。
看起来高科技了,但本质上只是把“物理文件柜”变成了“电子文件柜”。
大家能想到这种方式的致命弱点吗?
假设学校有三个部门(教务处、财务处、宿管科),每个部门都有一个独立的 Excel 文件记录学生信息。
张三,地址:北京
张三,地址:北京
张三,地址:北京
灾难来了:张三搬家到了上海。他去教务处改了地址,但财务和宿管科没改。
——这就是数据冗余导致的【数据不一致】!
假设你们组两个人同时打开了一个存放着班费记录的文本文档:
文件系统没有强大的“并发控制机制”(锁机制)。
为了解决文件系统的痛点,数据库 (Database) 诞生了。
官方定义: 长期存放在计算机内、有组织、统一管理、可以表现为多种形式、可共享的大量数据的集合。
通俗理解: 就像一个极其高度现代化的智能大仓库。里面的货物(数据)不再是乱扔的,而是按照严格的规格、分门别类地摆放在专属货架上,随时可以极速定位和提取。
数据本身。
就像仓库里满地的货物,静静地躺在硬盘里。
管理数据的超级软件。
比如 MySQL, Oracle。它们是“智能仓库管理员”,帮你建表、查数据、防黑客、处理并发!
平时大家随口说的“数据库”,其实是 DBMS 软件!
第一代
网状与层次模型
第二代
关系型数据库(RDBMS)
第三代
面向对象与数据仓库
第四代
NoSQL运动崛起
第五代
分布式与NewSQL
接下来,让我们沿着时间轴,逐一解密每一代数据库的核心突破!
早期 DBMS 为了把数据“有组织”地存放,发明了非常“硬核”的结构(数据模型):
典型代表是阿波罗登月计划使用的 IMS。数据呈树状结构(套娃,1对多)。缺点:必须从根节点一层层往下找,非常死板。
数据通过复杂的指针连接成一张网(多对多)。找数据就像走迷宫,一旦指针断了,数据就彻底找不到了。
如果表结构稍微改动一点,所有的查询代码必须全部重写!
网状和层次模型导致开发效率极低,维护极其痛苦。
IBM 研究员 Edgar F. Codd(埃德加·科德)
发表了改变整个 IT 历史的论文:
《大型共享数据库的数据关系模型》
(A Relational Model of Data for Large Shared Data Banks)
Codd 提出:废弃复杂的树和网!人类最容易理解的逻辑结构是二维表格。这就是现代 RDBMS (如 MySQL) 的核心。
数据不再像文件系统那样冗余存储,而是通过 主键 (Primary Key) 和 外键 (Foreign Key) 关联起来。
学号: 001 | 姓名: 张三 | 系别ID: D01
系别ID: D01 | 系名: 大数据系 | 主任: 李四
好处:如果系主任换人了,只需要修改“系别表”一次,所有学生的资料自动映射出新的主任!彻底解决数据不一致!
基于关系模型的 SQL (结构化查询语言) 的伟大在于它是声明式的。
你只需要写这一句话,DBMS 内部的优化器会自动决定是扫全表还是走索引。程序员彻底解放!
1970年代的理论,在1980年代彻底爆发,诞生了至今仍统治地球的商业巨头:
随着互联网前夕和企业管理升级,需求开始变复杂:
关系型数据库之所以能接管全球的金融、交易系统,
靠的就是对事务 (Transaction)的严密保护。
(接下来的四页,是任何面试必考的硬核考点!)
场景:张三给李四转账100元。
问题:如果动作1执行完,系统突然断电了怎么办?张三钱扣了,李四没收到?
原子性保证:这两个动作被捆绑在一起。要么全部成功,要么全部失败(自动回滚,把张三的钱退回去)。绝不会停在中间状态!
数据库状态必须从一个一致性状态转变到另一个一致性状态。满足你设定的所有业务规则。
例子:
如果有任何操作试图打破这些规矩,数据库会直接拒绝执行报错!保证数据的绝对合法。
场景:周杰伦演唱会只剩最后1张票,你和另一个人同时点击了购买。
如果没有隔离性:两个人的查询都显示有票,然后系统分别卖给你们,导致超卖(1张票卖了2次)!
隔离性保证:通过复杂的锁机制(Locking)或多版本并发控制(MVCC),让同时发生的事务就像排好队一个一个执行一样,互不干扰。
只要系统提示你“交易成功”(Commit),那么这个数据就永远保存下来了。
哪怕下一秒机房停电、服务器死机卡死、甚至主板烧了,只要硬盘物理没碎,系统重启后,你刚才存入的数据依然在!
(底层原理:RDBMS通过先写日志 Redo Log 的方式来实现这一点。)
Oracle、MySQL 等传统关系型 DBMS 统治了企业界几十年。
在只有银行柜员、超市收银员使用系统的年代,它们完美无缺。
但是,互联网时代来了!网民数量从百万激增到十亿级别!
传统 RDBMS 设计之初,默认数据是存放在一台机器上的。
单台服务器的硬盘容量是有限的,而且数据越大,查询像蜗牛一样慢(B+树过深)。
想象一个餐厅只有一个超级大厨(单台数据库服务器的 CPU 和内存)。
平时应付几十桌客人游刃有余。但在节假日(比如双十一、抢火车票),瞬间涌入上千万个点单请求(高并发 QPS)!
CPU 瞬间飙升到 100%,内存爆满,系统直接拒绝服务,页面显示“502 Bad Gateway”。
以前遇到瓶颈,企业的做法简单粗暴:这台服务器不行?换最顶配的小型机!换最昂贵的闪存存储!
普通服务器 ($2,000)
高端小型机 ($1,000,000)
硬件的单机性能存在物理极限。
性能提升 1 倍,成本可能飙升 100 倍!
马云当年提出“去IOE”就是因为淘宝的数据量涨得太快,
按照 Scale-Up 模式,买机器能把阿里巴巴买破产。
2000年代,为了追求极致的并发和扩展性,诞生了 Redis、MongoDB、HBase 等 NoSQL (Not Only SQL)。
但在涉及钱(金融、交易)的场景,依然不敢用 NoSQL,强一致性不能丢!
Scale-Out (水平扩展)
既然买不起一头巨大无比的牛,不如用 100 匹普通马拉车!
用一堆廉价的普通 PC 服务器,通过高速网络连接起来,软件层面让它们协同工作。
对于使用系统的程序员来说,他们感觉不到背后是一百台机器。
他们依然只看到一个入口,使用标准的 SQL 进行查询。
所有的路由、分片、节点故障切换,全部由分布式数据库系统在底层偷偷搞定!
现代分布式数据库(如 TiDB, OceanBase)通常采用存算分离架构,分为三个核心层:
系统的大脑。
只负责解析SQL,生成执行计划。它是无状态的,随时可以增加节点来抗并发压力。
系统的躯干。
真正存数据的地方。数据被切成小块,分散存在成千上万台存储节点上。
系统的总管。
记录元数据(谁存了什么)。负责发号施令,监控各节点的死活。
一张 100 亿行的表,一台机器装不下也查不动。
分布式系统会自动把它“切”成 100 份(每份 1 亿行),均匀分布在 100 台存储节点上。
按数据的范围切。
例如:节点1存用户1~1000万,节点2存1000万~2000万...
通过 Hash 函数把数据打散。
例如:学号模除3,余数决定去哪个节点。
既然机器多了,机器宕机、硬盘损坏就变成了常态。
为了保证数据不丢,每一个数据分片,都会在不同的物理机器上存 3 份副本(1个 Leader,2个 Follower)。
张三(数据在机器A)给李四(数据在机器B)转账。
如何保证A扣钱和B加钱必须同时成功?这就是著名的分布式事务难题。
2PC (两阶段提交) 机制:引入一个协调者。
阶段1 (准备): 协调者问 A和B:"能干不?" A和B分别锁住资源,回答"准备好了!"
阶段2 (提交): 协调者收到所有同意后,大喊:"动手!" A和B同时落盘。如果有任何一个报错,协调者大喊:"全部撤销!"
在分布式世界里,你不可能什么都要。
一致性 (Consistency)、可用性 (Availability)、分区容错性 (Partition tolerance)。
鱼与熊掌不可兼得,最多只能三选二!
(由于网络必有波动,P必须选,实际上是在 C 和 A 之间权衡)
对于大部分互联网应用(如点赞、评论),没必要追求死板的强一致性 (C),那样系统太容易卡顿。
2010年代后,Google Spanner, TiDB, OceanBase 等 NewSQL 横空出世。
它们既能像支付宝一样一分钱不差,又能像双十一一样抗住千万级高并发。
它们是目前云原生时代大厂的核心基石。
以前,老板要看报表,得把交易库的数据抽取到专门的数据仓库,要等一天 (T+1)。
HTAP (混合事务/分析处理): 现代分布式数据库的新魔法!
专门负责高并发的订单写入、扣款等交易业务。
数据实时同步过来并转为列式存储,专门负责生成实时数据大屏,毫秒级分析全国销量。
同一套系统,两套引擎,互不干扰!
金融机构采用"两地三中心"或"三地五中心"的分布式部署架构。
全国 100 万辆新能源汽车,每辆车每 10 秒上传一次电池温度、车速、位置。
这种数据叫时序数据 (Time-Series),特点是:疯狂只写不改,数据量按 PB 级增长。
彻底按需付费,你连服务器配置都不用选,流量来了系统自动“膨胀”,没有流量自动缩为零,像用水电一样用数据库。
让 AI 来管理数据库!自动发现慢 SQL,自动建索引,自动预测明天的流量并提前扩容。未来的 DBA 可能就是 AI 监督员。