课程概述
存储系统和数据库系统往往是后端服务的最后一环,提供数据存储、查询能力。本课程会先用模拟案例导入,向学员介绍存储系统、数据库系统的特点,然后解析多个主流产品,最后分享存储和数据库结合新技术演进的方向。本节课程主要包含以下内容:
- 模拟案例
- 存储 & 数据库简介
- 主流产品剖析
- 新技术演进
课前材料 (必须)
跟存储 & 数据库系统相关的材料很多,涵盖开源项目、博客、论文等。下面提供部分资料作为参考
- The Google File System
static.googleusercontent.com/media/resea…
作为各种开源分布式文件系统的鼻祖,GFS 论文里面提到的架构非常经典,值得一学。
- The Linux Programming Interface(第13章 FILE I/O BUFFERING)
本书介绍了很多 Linux 内核子系统的实现,其中第13章着重讲了单机的文件 IO。学习完 Linux 中的文件 IO 栈,对单机存储系统会有更深的认识。
课程详情
经典案例
通过一个模拟案例,描述了数据是怎么产生,在后端系统里怎么流通,最后怎么写入到存储/数据库系统。
存储 & 数据库简介
-
存储系统概览
- 存储系统特点
- 存储器层级结构
- 单机存储栈
- RAID 技术
-
数据库系统概览
- 关系型数据库特点
- 非关系型数据库特点
- 数据库 vs 经典存储
- 数据库使用方式
主流产品剖析
-
单机存储产品
- 单机文件系统
- 单机 key-value 存储
-
分布式存储产品
- HDFS
- Ceph
-
单机数据库产品
- 关系型数据库 —— PG、MySQL
- 非关系型数据库 —— ES、MongoDB、Redis
- Elasticsearch 使用案例
-
分布式数据库产品
- 问题与挑战
- 解决方案
新技术演进
- SPDK
- 人工智能
- 新硬件加速
课后思考
- 写入存储系统的粒度太大,会不会导致数据原子性问题?例如一次性写100MB,如果系统突然 crash,会不会只有一部分数据持久化了,另一部分丢失了?如果要解决原子性问题,一般会设计什么机制?
- 在从应用程序到存储介质的链路上,无论读还是写,数据可能要被拷贝好几次,这几次拷贝能不能去掉?如果我们去掉大部分拷贝操作,会有什么副作用,要怎么缓解副作用?
- 一个关系型数据库大概率是会被并发访问的,如果要保证并发安全,除了在行数据上加悲观锁还有其他方式吗?
- 在数据库领域,把数据按行存和按列存各有好处,你能从性能优先的角度设计出一种混合存储格式吗?
课后大作业
实现一个(分布式)key-value 存储系统
作业要求:
- 基于本地文件系统实现,支持常用的 put(k, v)、get(k, v)、scan_by_prefix(prefix) 接口
- 支持存储 server 独立进程部署,支持跨进程或者网络访问
- IO 操作做到低时延
*可选: 支持扩展成分布式架构,多台存储 server 组成一个分布式 key-value 存储系统,并保证全局的数据一致性。
作者:青训营官方账号
链接:juejin.cn/post/710112…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。