这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
目录
- 经典案例
- 存储 & 数据库简介
- 主流产品剖析
经典案例
- 数据的产生
- 当你下载一个app点击注册等操作时,数据就已经产生了
- 数据的流动
- 注册数据 --> 后端服务器 --> 数据库
- 数据的持久化
- 校验数据合法性
- 修改内存
- 写入存储介质
- 潜在的问题
- 数据库怎么保证数据不丢
- 数据库怎么处理多人同时修改的问题
- 为什么用数据库,可以用其他的存储系统吗?
- 数据库只能处理结构化数据吗
- 有哪些操作数据库的方式,要用什么编程语言
存储 & 数据库简介
存储
什么是存储系统? 一个提供了读写、控制类接口,能够安全有效的把数据持久化的软件。
系统特点
- 性能敏感
- 容易受硬件影响
- 系统代码既简单又复杂
RAID
要做到高性能、高性价比、高可靠性,必须要有RAID(Redundant array of inexpensive disks)
RAID出现的背景
- 单块大容量磁盘价格 > 多块小容量磁盘价格
- 单块磁盘写入性能 < 多块磁盘的并发写入性能
- 单块磁盘的容错能力有限
RAID0
- 多块磁盘的简单组合
- 数据条带化存储,提高磁盘带宽
- 没有额外的容错设计
RAID1
- 一块磁盘对应一块额外镜像盘
- 真实空间利用率仅50%
- 容错能力强
RAID 0 + 1
- 结合了RAID0 和 RAID1
数据库简介
关系型数据库是存储系统,但是除了存储还发展出了其他能力
- 结构化数据友好(以表形式管理)
- 支持事务(ACID)
- 支持复杂查询语言(SQL)
ACID
- Atomicity: 事务内的操作要么全做,要么不做
- Consistency:事务执行前后,数据状态一致(比如转账操作,你多了50块,我少了50块)
- Isolation: 事务可以隔离多个并发事务,避免影响
- Durability: 事务一旦提交成功,数据保证持久性
主流产品剖析
单机存储 -- 本地文件系统
Linux 文件系统的两大数据结构: Index Node & Directory Entry Index Node
- 记录文件元数据,如id,大小,权限,磁盘位置
- inode是文件的唯一标识,会被存储到磁盘上
单机存储 -- key-value存储
如:LSM-Tree,某种程度上牺牲读性能,追求写入性能
拳头产品:RocksDB
分布式存储 -- HDFS
HDFS核心特点
- 支持海量数据存储
- 高容错
- 弱posix语义
- 使用普通x86服务器,性价比高
分布式存储 -- Ceph
- 一套系统支持对象接口,块接口,文件接口,但是一切皆对象
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH算法