这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记
1、经典案例
小明同学下载一个全新的app,第一次登录需要注册账号,填写信息之后点击【注册】按钮,数据就从无到有地产生了,并在数十|数百毫秒内向app地后端服务器奔去。
数据的流动:
- 注册数据(结构化的)
- 后端服务器
- 数据库(这一步之后才算是真正的持久化了)
- 其他系统(存储或者非存储)
数据的持久化
- 校验数据的合法性
- 修改内存
- 写入存储介质
潜在问题
- 数据库如何保证数据不丢失?
- 数据库如何处理多人同时修改的问题?
- 为何用数据库,除了数据库还能存到别的存储系统?
- 数据库只能除了结构化数据吗?
- 有哪些操作数据库的方式,要用什么编程语言?
2、数据库简介
什么是存储系统
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统
存储系统特点
作为后端软件的底座,性能敏感(整体要做到超高性能)
存储系统代码,既简单又复杂(代码要简单,但也要考虑错误异常等)
存储系统软件架构,容易受到硬件影响
数据怎么从应用到存储介质
【缓存】很重要,贯穿整个存储体系
【拷贝】很昂贵,应该尽量减少
硬件设备五花八门,需要有抽象统一的接入层
RAID技术
单机存储系统如何做到高性能、高性价比、高可靠性?
R(edundant)A(rray)I(nexpensive)D(isks)
RAID出现的背景:
单块大容量磁盘的价格>多块小容量磁盘
单块磁盘的写入性能<多块磁盘的并发写入性能
单块磁盘的容错能力有限,不够安全
RAID组合:
RAID 0
·多块磁盘简单组合
·数据条带化存储,提高磁盘带
·没有额外的容错设计
RAID 1
·一块磁盘对应一块额外镜像盘
·真实空间利用率仅50%
·容错能力强
RAID0+1
·结合了RAID 0和 RAID 1
·真实空间利用率仅50%
·容错能力强,写入带宽好
数据库
数据库和存储系统不一样吗?
关系型数据库 & 非关系型数据库
关系型数据库
关系=集合=任意元素组成的若干有序偶对,反映了事物间饿关系
SQL=一种DSL(邻域专用语言)=方便人类阅读的关系代数表达形式
关系型数据库是存储系统,但是在存储之外,又发展出其他能力:结构化数据友好、支持事务(ACID)、支持复杂查询语句
非关系型数据库
也是存储系统,但是一般不要求严格的结构化
半结构化数据友好、可能支持事务(ACID)、可能支持复杂查询语言
数据库 vs 经典存储
1、结构化数据管理
2、事务能力
经典存储就没有事务这个概念
3、复杂查询能力
数据库使用方式
Everything is D(omain) S(pecific) L(anguage)==>maybe SQL
以sql为例:
要操作数据时,支持以下操作:
insert、update、select、delete、where子句、groupby、orderby
要对数据定义做修改时,支持以下操作:
creater user、create database、create table、alter table ...
3、 主流产品剖析
单机存储
单个计算机节点上的存储软件系统,一般不涉及网络交互
例如:本地文件系统、key-value存储系统
分布式存储
在单机存储的基础上实现了分布式协议,涉及大量网络交互
例如:分布式文件系统、分布式对象存储系统
分布式存储-HDFS:
大数据时代的基石
时代背景:专用的高级硬件很贵,数据存量很大,要求超高吞吐
核心特点:
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用普通x86服务器,性价比高
架构图:
分布式存储-Ceph
开源分布式存储系统里的万金油
核心特点:
- 一套系统支持对象接口、块接口、文件接口,但是一切皆对象
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH算法,HASH+权重+随机抽签
单机数据库
单个计算机节点上的数据库系统
事务在单机内执行,也可能通过网络交互实现分布式事务
关系型数据库:
商业Oracle称王,开源MySQL和PostgreSQL称霸
关系型数据库通用组件:
·Query Engine——负责解析query,生成查询计划
·Txn Manager ———负责事务并发管理
·Lock Manager ———负责锁相关的策略
·Storage Engine ——负责组织内存/磁盘数据结构
·Replication ——负责主备同步
关键内存数据结构:B-Tree、B+-Tree、LRU List等
关键磁盘数据结构:WriteAheadLog (RedoLog)、Page
非关系型数据库
MongoDB、Redis、Elasticsearch三足鼎立
关系型数据库一般直接使用SQL交互,而非关系型数据库交互方式各不相同
非关系型数据库的数据结构千奇百怪,没有关系约束后,schema相对灵活
不管是否关系型数据库,大家都在尝试支持SQL(子集)和“事务”
分布式数据库
解决三个问题:容量、弹性、性价比
除了解决三个单机的问题,分布式数据库更多的功能有:从单写到多写,从磁盘弹性到内存弹性,分布式事务优化
总结:这节课介绍了存储系统、数据库系统、分布式架构,关系型和非关系型数据库都是存储系统,但是在存储系统之后还有别的功能。使用更多的是关系型数据库,在商用方面是Oracle称王,开源的主要是MySQL和PosrgreSQL,非关系型数据库是MongoDB、Redis、Elasticsearch三足鼎立,也正因为这样,非关系型数据库也在不断内卷,在尝试支持SQL和事务。从单机到分布式,分布式数据库解决了很多单机的问题,还有更多的扩展功能。