主流存储产品剖析 | 青训营笔记

128 阅读4分钟

主流存储产品剖析

1. 单机存储

单机存储-概览

单级存储 = 单个计算机节点上面的存储软件系统,一般不涉及网络交互,典型的例子是本地文件系统和key-value存储系统

本地文件系统
  • 在linux中,一切皆文件
  • 文件系统的管理单元就是文件,虽然文件系统很多,但是都遵循VFS的统一抽象接口
  • linux文件系统的两大数据结构:Index Node & Directory Entry
  • Index Node 主要记录文件的元数据,比如说id,大小,权限,磁盘位置等,inode就是一个文件的唯一标识,会被存储在磁盘上面,inode可用的数量在格式化文件系统的时候就固定了
  • Directory Entry 记录文件名、inode指针,层级关系等 dentry是内存结构,和inode的关系是N:1(hardlink),相当于目录
key-value存储
  • 常见的使用方式: put(k, v), get(k)
  • 常见数据结构: LSM-Tree, 某种程度上牺牲读性能,追求写入性能

2. 分布式存储系统

概览
  • 分布式存储 = 在单机存储基础上面实现了分布式协议,涉及大量的网络交互
  • 分为分布式文件系统和分布式对象存储
HDFS系统

(1) 大数据时代的基石 (2) 核心特点

  • 支持海量数据存储
  • 高容错率
  • 弱POSIX语义
  • 使用x86服务器,性价比高
Ceph:开源分布式存储系统里的万金油

(1)核心特点

  • 一套系统支持对象接口、块接口、文件接口,但是一切皆对象
  • 数据写入采用主备复制模型
  • 数据分步模型采用CRUSH算法 转存失败,建议直接上传图片文件

3. 单机数据库

概览

单机数据库 = 单个计算机节点上的数据库系统,事务在单机内执行,也可能通过网络交互实现分布式事务

关系型数据库

(1) 商业产品:Oracle (2) 开源产品: MySQL, PostgreSQL (3) 关系型数据库的通用组件:

*   QueruEngine----负责解析query,生成查询计划
*   Txn Manager ---- 负责事务并发管理
*   Lock Manager ---- 负责锁相关的策略
*   Storage Engine ---- 负责组织内存/磁盘数据结构
*   Replication ---- 负责主备同步

(4)关键的数据结构:B-Tree、B+-Tree, LRU List

(5)关键磁盘数据结构:WriteAheadLog(Redolog), Page 转存失败,建议直接上传图片文件

非关系型数据库

(1) MongoDB、Redis、Elasticsearch三足鼎立 (2)Elasticsearch * 面向 文档 存储 * 文档可序列化为JSON,支持嵌套 * 存在index, index = 文档的集合 * 存储和构建索引能力依赖Lucene引擎 * 实现了大量搜索数据结构和算法 * 支持RESTFULAPI ,也支持弱SQL交互 (3)MongoDB * 面向文档存储 * 文档可序列化为JSON/BSON, 支持嵌套 * 存在collection, collection = 文档的集合 * 存储和构建能力依赖wiredTiger引擎 * 4.0之后开始支持事务(多文档、跨分片多文档) * 常用client/SDK交互,可以通过插件转义支持弱SQL (4) Redis * 数据结构丰富 * C语言实现,性能高 * 主要基于内存,支持AOF,RDB持久化 AOF: 追加文件 RDB: 生成快照 * 常用redis-cli/多语言SDK交互 (5) Elasticsearch使用案例 转存失败,建议直接上传图片文件

4. 分布式数据库

(1) 解决容量问题,单机容量有限,受到硬件限制,因此使用分布式系统将存储节点池化,支持动态扩容缩容 (2) 解决弹性问题,服务器资源可能会变动,比如说服务器硬件硬盘容量会变化,CPU会变化,内存大小也会变化,因此要动态调整数据库,即解决弹性问题 (3) 解决性价比问题,使用分布式池化技术之后,可以根据机器性能动态分配存储空间 (4)存在单写vs多写问题 (5)分布式事务优化问题 (6)内存弹性问题

总结

这节课的内容干货满满,从一开始的单机存储, 再到分布式存储,然后再介绍单机数据库,最后到分布式数据库,老师为我们介绍了大部分的主流存储系统和主流的数据库,其中最重要的点个人感觉还是在关系型数据库和非关系型数据库上面,为什么这样子说呢?首先关系型数据库在经过这么多年的发展,市面上有许多成熟的产品,而且现在的应用也非常广泛,是一门必要掌握的技术,因此深入去了解关系型数据库是非常重要的,比如说了解一下关系型数据库的存储方式,存储引擎,事务实现,分布式部署等相关知识。而非关系型数据库作为后起之秀,对于某些应用场景具有更好的适用性,因此主要的作用是作为关系型数据库的补充,填补关系型数据库性能上的缺陷,作为后端程序员必须要了解各种数据库的适用场景和相关特性。