这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
一、 存储技术---RAID
- 单机存储系统
- 出现背景
- 单块大容量磁盘的价格>多块小容量磁盘
- 单块磁盘的写入性能<多块磁盘的并发写入性能
- 单块磁盘的容错能力有限,不够安全
- 怎么做到高性能/高性价比/高可靠性?
- 解决办法
- RAID 0
- 多块磁盘简单组合
- 数据条带化存储,提高磁盘带宽
- 没有额外的容错设计
- RAID 1
- 一块磁盘对应一块额外镜像盘
- 真实空间利用率仅50%
- 容错能力强
- RAID 0+1
- 结合了RAID 0和RAID 1
- 真实空间利用率仅50%
- 容错能力强,写入带宽好
- RAID 0
- 解决办法
- 分类
- 本地文件系统
- key - value型
- 出现背景
- 分布式存储
- HDFS
- 核心特点:
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用普通x86服务器,性价比高
- 核心特点:
- Ceph
- 核心特点:
- 一套系统支持对象接口、块接口、文件接口,但是一切皆对象
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH算法(CRUSH算法: HASH+权重+随机抽签)
- 核心特点:
- HDFS
- 单机数据库
- 关系型数据库
- 通用组件
- Query Engine: 负责解析query,生成查询计划
- Txn Manager: 负责事务并发管理
- Lock Manager: 负责锁相关的策略
- Storage Engine: 负责组织内存/磁盘数据结构
- Replication: 负责主备同步
- 数据结构
- 内存:B-Tree、B+-Tree、LRU List等
- 磁盘: WriteAheadLog(RedoLog)、Page
- 通用组件
- 非关系型数据库
- MongoDB
- 面向「文档」存储
- 文档可序列化成SON/BSON,支持嵌套
- 存在「collection」,collection=文档的集合
- 存储和构建索引能力依赖wiredTigeri引擎
- 4.0后开始支持事务(多文档、跨分片多文档等
- 常用client/SDK交互,可通过插件转译支持弱SQL
- Redis
- 数据结构丰富(hash表、set、Zset、Iist
- C语言实现,超高性能
- 主要基于内存,但支持AOF/RDB持久化
- 常用redis-cli/多语言SDK交互
- Elasticsearch
- 面向「文档」存储
- 文档可序列化成JSON,支持嵌套
- 存在「index.」,index=文档的集合
- 存储和构建索引能力依赖Lucene引擎
- 实现了大量搜索数据结构&算法
- 支持RESTFUL API,也支持弱SQL交互
- MongoDB
- 关系型数据库