一、经典案例
1.1 数据的产生
用户输入信息,向服务器发送时,数据便产生了。
1.2 数据的流动
数据常以json格式由终端发出,经过后端服务器的处理,被存储在数据库中完成持久化,数据库再将数据发送给其他系统。
1.3 数据的持久化
数据持久化主要分为三个步骤:
-
检验数据的合法性(“小明”是否已存在?)
-
修改内存(用高效的数据结构组织数据)
-
写入存储介质(用综合性能和寿命的方式把数据写入硬件)
1.4 潜在问题
-
数据库怎么保证数据不会丢失?
-
数据库怎么处理多人同时修改的场景?
-
数据能存到其他非数据库的存储系统里吗?
-
数据库只能处理结构化的数据吗?
-
数据库应该怎么操作?
二、存储 & 数据库
2.1 存储系统
存储系统是指提供了读写、控制类接口,能够安全有效地把数据持久化的软件。
2.2 存储系统的特点
-
性能敏感,存储系统是后端软件的底座
-
易受到硬件影响,由存储系统软件架构决定
-
代码形式简单内部复杂,源自于存储系统代码设计
2.3 存储器层次结构
2.4 存储器->(数据)->应用
-
缓存是核心,贯穿整个存储体系,既能匹配速度,又能扩大容量
-
拷贝的代价是昂贵的,应该尽量避免对数据进行拷贝操作
-
硬件设备是多种多样的,需要有统一抽象的接入层
2.5 RAID
一种实现了兼具高性能、高性价比和高可靠性的存储系统设计。
出现背景:
-
单块大容量磁盘的价格大于多块小容量磁盘的价格
-
单块磁盘的写入性能小于多块磁盘的并发写入性能
-
单块磁盘的容错能力有限,安全性不足
RAID 分类:
-
RAID 0 :多块磁盘简单组合,数据条带化存储,无额外容错设计
-
RAID 1 :一对一镜像磁盘,空间利用率较低,容错能力高
-
RAID 2 :结合RAID 0和RAID 1,空间利用率较低,容错能力和写入带宽较好
2.6 数据库
数据库主要分为关系数据库和非关系数据库两类,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
2.7 关系数据库
关系模型起源于集合领域,由关系代数和SQL等工具的出现逐渐完善,最终诞生了关系型数据库。关系数据库对结构化数据友好,支持事务的ACID,支持复杂查询语言SQL。
2.8 非关系数据库
非关系数据库不要求严格的结构化,这样能使其更符合现实数据的存在形式,非关系数据库对半结构化数据友好,可能支持事务的ACID,可能支持复杂的查询语言。
2.9 结构化数据管理
2.10 事务的ACID
2.11 SQL
SQL语言简单、便捷,能够以较少的代码量实现较为复杂的功能。
三、主流产品剖析
3.1 单机存储
单机存储是指单个计算机节点上的存储软件系统,一般不涉及网络交互,常见的单机存储有本地文件系统和key-value存储。
- 本地存储系统(以Linux为例):
- key-value存储(以RocksDB为例):
3.2 分布式存储
分布式存储在单机存储的基础上实现了分布式协议,涉及到大量的网络交互,常见的分布式存储有分布式文件系统和分布式对象存储。
- 分布式文件系统(以HDFS为例):
- 分布式对象存储(以Ceph为例):
3.3 单机数据库
单机数据库是指单个计算机节点上的数据库系统,事务在单机内执行,也可能通过网络交互实现分布式事务,单机数据库有关系数据库和非关系数据库两种。
- 关系型数据库:
- 非关系型数据库:
3.4 分布式数据库
单机数据库在容量、弹性和性价比这三个方面的问题越来越严重,分布式数据库的应用一定程度上能解决这三个问题。但在多写、内存弹性和分布式事务优化方面还需要进步。
- 容量问题:
- 弹性问题:
- 性价比问题:
四、新技术演进
数据存储的新技术主要体现在软件架构、AI增强和新硬件革命三个方面。
- 软件架构变更:
- AI 增强:
- 新硬件革命: