存储系统| 青训营笔记

63 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

一、 存储技术---RAID

  • 单机存储系统
    • 出现背景
      • 单块大容量磁盘的价格>多块小容量磁盘
      • 单块磁盘的写入性能<多块磁盘的并发写入性能
      • 单块磁盘的容错能力有限,不够安全
    • 怎么做到高性能/高性价比/高可靠性?
      • 解决办法
        • RAID 0
          • 多块磁盘简单组合
          • 数据条带化存储,提高磁盘带宽
          • 没有额外的容错设计
        • RAID 1
          • 一块磁盘对应一块额外镜像盘
          • 真实空间利用率仅50%
          • 容错能力强
        • RAID 0+1
          • 结合了RAID 0和RAID 1
          • 真实空间利用率仅50%
          • 容错能力强,写入带宽好
    • 分类
      • 本地文件系统
      • key - value型
  • 分布式存储
    • HDFS
      • 核心特点:
        • 支持海量数据存储
        • 高容错性
        • 弱POSIX语义
        • 使用普通x86服务器,性价比高
    • Ceph
      • 核心特点:
        • 一套系统支持对象接口、块接口、文件接口,但是一切皆对象
        • 数据写入采用主备复制模型
        • 数据分布模型采用CRUSH算法(CRUSH算法: HASH+权重+随机抽签)
  • 单机数据库
    • 关系型数据库
      • 通用组件
        • 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交互