这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
数据库的经典问题
- 保证数据不丢
- 多人修改
- 别的存储系统
- 只能处理结构化数据吗
- 有哪些操作方式
存储系统
特点
- 性能敏感
- 受硬件影响
- io路径上要简单,但是在异常处理上要复杂
数据从应用到介质
- 缓存很重要,贯穿整个体系
- 拷贝很昂贵,应该尽量减少
- 为五花八门的硬件统一抽象的接口
关系型数据库的特点
- 结构化数据友好
- 支持事务
- 支持SQL复杂语句
非关系型数据库的特点
半结构化数据友好 可能支持事务 可能支持复杂语句
主流的数据库
单机存储
本地文件系统
Linux 的一切皆文件
key-value数据库 rocksDB
一切皆k-v
- 追求写入速度
- 牺牲了读取性能
分布式存储系统
在单机的基础上,实现了分布式协议。涉及大量的网络交互
分布式文件系统 (HDFS)
特点
- 支持海量存储
- 高容错
- 弱POSIX语义
- x86机器,性价比高
分布式文件系统 ceph
特点
- 一切皆对象
- 采用主备复制
- 数据分布模型采用CRUSH算法 HASH+权重+随机抽签
单机数据库
关系型数据库
- mysql
- postgresql
非关系型
- mongoDB
- redis
- elasticsearch
总结 存储系统
- 块存储 最底层的系统,接口朴素
- 文件系统 日常使用最广泛的系统,接口友好,有多种的实现方式
- 对象存储:公有云上的常见的存储,immutable
- k-v存储 形式比较灵活,有大量的开源非开源产品
数据库系统
- 关系型数据库 基于关系和关系代数,支持事务和SQL语句,用户友好
- 非关系型 结构比较灵活,针对不同的场景都能使用
分布式架构
- 数据分布策略:决定数据怎么分不到物理节点,是否均匀,能否高性能
- 数据复制协议 影响io的路径,常见的机器故障处理方法
- 分布式事务协议 多节点共同保证事务的ACID特性