[存储与数据库 | 青训营笔记]

78 阅读3分钟

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 非关系型数据库

MongoDBRedisElasticearch三足鼎立
关系型数据库一般直接用SQL交互,而非关系型数据库交互方式各不相同
非关系型数据库的数据结构千奇百怪,没有关系约束后,schema相对灵活
不管是否关系型数据库,大家都在尝试支持 SQL(子集)和 “事务”