这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
带你认识存储的本质 - 状态
数据库
数据库关心的问题
- 数据库怎么保证数据不丢 ?
- 数据库怎么处理多人同时修改的问题 ?
- 为什么用数据库,除了数据库还能存到别的存储系统吗 ?
- 数据库只能处理结构化数据吗 ?
- 有哪些操作数据库的方式,要用什么编程语言 ?
什么是存储系统
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统。
关系 (Relation)
Edgar.F.Codd于1970年提出 [关系模型]
关系代数 = 对关系作运算的抽象查询语言
关系 = 集合 =任意元素组成的若干有序偶对反应了事物间的关系
SOL = 一种DSL = 方便人类阅读的关系代数表达形式
非关系型数据库也是存储系统,但是一般不要求严格的结构化
存储 & 数据库简介
-
存储系统概览
- 存储系统特点
- 存储器层级结构
- 单机存储栈
- RAID技术
-
数据库系统概览
- 关系型数据库特点
- 非关系型数据库特点
- 数据库 vs 经典存储
- 数据库使用方式
主流产品剖析
-
单机存储产品
- 单机文件系统
- 单机key-value存储
-
分布式存储产品
- HDFS
- Ceph
-
单机数据库产品
- 关系型数据库 —— PG、MySQL
- 非关系型数据库 —— ES、MongoDB、Redis
- Elasticsearch使用案例
-
分布式数据库产品
- 问题与挑战
- 解决方案
新技术演进
- SPDK
- 人工智能
- 新硬件加速
课后作业
-
写入存储系统的粒度太大,会不会导致数据原子性问题?例如一次性写100MB,如果系统突然crash,会不会只有一部分数据持久化了,另一部分丢失了?如果要解决原子性问题,一般会设计什么机制?
-
在从应用程序到存储介质的链路上,无论读还是写,数据可能要被拷贝好几次,这几次拷贝能不能去掉?如果我们去掉大部分拷贝操作,会有什么副作用,要怎么缓解副作用?
-
一个关系型数据库大概率是会被并发访问的,如果要保证并发安全,除了在行数据上加悲观锁还有其他方式吗?
-
在数据库领域,把数据按行存和按列存各有好处,你能从性能优先的角度设计出一种混合存储格式吗?