1.数据
1.1数据的流动
graph TD
用户 --> 后端 --> 数据库
1.2数据的持久化
检验数据的合法性,即数据是否存在 --> 用高效的数据结构组织数据修改内存 --> 以寿命&性能友好的方式写入硬件
1.3 事务
事物具有:
A,事务内的操作要么全做,要么不做
C,事务执行前后,数据状态是一致的
I,可以隔离多个并发事务,避免影响
D,事务一旦提交成功,数据保持持久性
2.存储系统
一个提供读写、控制类接口,能够安全有效的把数据持久化的软件,就可以称为存储系统。
特点
作为后端的底座,性能敏感。 存储系统代码,既"简单"又"复杂"。 存储系统软件架构,容易受硬件影响。
3. 数据库
3.1 关系型数据库特点
关系型数据库是存储系统,但是在存储之外 结构化友好 支持事务 支持复杂性语言
3.2 非关系型数据库特点
关系型数据库是存储系统,但是在存储之外 半结构化友好 可能支持事务 可能支持复杂性语言
4.单机存储
4.1 本地文件系统
Linux经典哲学:一切皆文件
文件系统的管理单元:文件
文件系统接口:文件系统繁多,如Ext2/3/4,sysfs,rootfs等,但都遵循VFS的统一抽象接口
Linux文件系统的两个数据结构:Index Node & Directory Entry
Index Node:
记录文件元数据,如id、大小、权限、磁盘位置等
inode是一个文件的唯一标识,会被存储到磁盘上
inode的总数在格式化文件系统时就被固定了
Directory Entry:
记录文件名、inode指针、层级关系等
dentry是内存结构,与inode的关系是N:1(hardlink的实现)
5.分布式存储
5.1 HDFS
堪称大数据的基石
时代背景:专用的高级硬件很贵,同时数据存量很大,要求超高吞吐
核心特点:
支持海量数据存储
高容错性
弱ROSIX语义
使用普遍x86服务器,性价比高
5.2 Ceph
开源分布式存储系统里的万金油
核心特点:
一套系统支持对象接口、块接口、文件接口,但是一切皆对象。
数据写入采用主备复制模型
数据分布模型采用CRUSH算法
6.单机数据库
单个计算机节点上的数据库系统。事务在单机内执行,也可能通过网络交互实现分布式事务
6.1 关系型数据库
商业产品Oracle称王,开源产品MySQL & PostageSQL称霸
通用组件:
Query Engine —— 负责解析query,生成查询计划
Txn Manager —— 负责事务并发管理
Lock Manager —— 负责锁相关策略
Storage Engine —— 负责组织内存/磁盘数据结构
Replication —— 负责主责同步
关键内存数据结构:B-Tree、B+-Tree、LRU List等
关键磁盘数据结构:WriteAheadLog(Redolog)、Page
6.2 非关系型数据库
MongoDB、Redis、Elasticearch三足鼎立
关系型数据库一般直接用SQL交互,而非关系型数据库交互方式各不相同
非关系型数据库的数据结构千奇百怪,没有关系约束后,schema相对灵活
不管是否关系型数据库,大家都在尝试支持 SQL(子集)和 “事务”