存储与数据库
这是我参与「第五届青训营」笔记创作活动的第十四天,存储系统和数据库相关内容,了解了数据从产生到流动到最终被记录的过程和常见的数据库产品。
经典案例
- 数据的产生和流动
- 数据产生:注册账号
- 数据流动
- 产生结构化数据 常见字段->后端服务器->数据库
- 数据库->其他系统(可能存在)
- 数据持久化
- 检查数据合法性
- 修改内存:合理组织结构
- 写入存储介质:寿命&性能友好的方式写入
- 问题:
存储系统
存储系统基础
- 定义:提供了读写控制类接口,能安全有效把数据持久化的软件
- 要求:User,存储介质,内存,网络
- 系统特点:
- 性能敏感:超高性能要求
- 容易受硬件影响
- 代码“简单”又“复杂”:iO路径简单,异常情况处理复杂
- 存储器层级结构
- 小而快->大而慢
- 数据从应用到存储介质
- 缓存很重要,贯穿整个体系(软件cache实现跨软硬件层的友好访问)
- 拷贝很昂贵,尽量减少
- 硬件设备多样,需要抽象统一的接入层
- RAID技术
- 背景
- RAID0
- 多块磁盘简单组合
- 数据条带化存储,提高带宽(机组基础)
- 没有容错设计
- RAID1
- 一块磁盘对应一块镜像盘
- 利用率50%
- 容错强
- RAID 0+1
- 结合RAID 0和RAID 1
- 利用率50%
- 带宽高
- 背景
数据库
- 关系是什么?
- 关系=集合:反应了事物间的关系
- 关系代数:关系作运算的抽象查询语言
- 交并补
- SQL:一种DSL=方便人类阅读的关系代数表达形式
- 关系型数据库
- 关系型数据库是存储系统但在存储外发展出了其他能力
- 特点:
- 结构化数据友好
- 支持事务
- 支持复杂查询语言SQL
- 非关系型
- 非关系型数据库也是存储系统,不要钱严格的结构化
- 特点:
- 半结构化数据友好
- 可能支持事务
- 可能支持sql
- 数据库vs经典存储
- 结构化管理
- 事务
- A(atomicity):事务内的操作,要么全做,要么不做
- C(consistency):事务执行前后,数据状态一致
- I(isolation),隔离多个并发事务,避免影响
- D(durability),事务一旦提交成功,数据保证持久性
- 复杂查询能力
- 结构化管理
主流存储产品
- 单机存储
- 定义:单个计算机的存储软件系统,一般不涉及网络交互 eg:本地文件系统
- 本地文件系统:
- 文件系统管理单元:文件
- 文件系统接口:VFS统一的抽象接口
- Linux文件系统的两大数据结构:Index Node & Directory Entry
- key-value存储
- 常见LSM-Tree,牺牲读性能,追求写入性能
- RocksDB
- 文件系统管理单元:文件
- 分布式存储
- 单机存储基础上实现分布式协议,大量网络交互
- 分布式文件系统--HDFS
- 背景:
- 专用的硬件贵
- 数据存量大
- 超高吞吐
- 核心特点:
- 海量数据存储
- 高容错性
- 弱POSIX
- 使用普通的X86服务器,性价比高
- Management Node:(管控面)
- NameNode:存储数据系统拓扑【物理位置】
- StorageNode
- DataNode上做计算
- 背景:
- Ceph:分布式存储系统的万金油
- 特点:
- 支持文件接口,块接口,对象接口,一切皆对象
- 主备模型,先写主节点再拷贝
- 数据分布模型采用CRUSH算法
- 分布模型:副本的存储位置选择(多台服务器)
- Hash+权重+抽取
- 单机数据库:事务在单机内执行,也可能通过网络交互实现分布式事务
- 单机关系型数据库
- 典型
- 存储结构
- 典型
- 单机非关系型数据库
- 典型:
- Elasticsearch
- 模糊搜索
- 模糊搜索
- mongodb
- redis
- 典型:
- 分布式数据库
- 出现背景
- 单点容量有限,硬件限制
- 弹性:资源紧张时,扩缩容麻烦
- 性价比
- 解决方案
- 存储池,存储节点池化,动态扩缩容
- 存储池,存储节点池化,动态扩缩容
- Moretodo:
- 多写入
- 内存弹性
- 分布式事务优化
- 出现背景
新技术演进
- 概览
- SPDK
- AI
- 硬件
标题:认识存储与数据库 - 掘金