存储与数据库系统 | 青训营笔记

169 阅读3分钟

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

存储系统概览

什么是存储系统

一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统。

用户,存储介质,内存,网络

系统特点

性能敏感,容易受硬件影响,代码既简单、又复杂(IO路径上代码不能过于复杂,但非IO路径上,或IO路径的异常处理路径上,需要考虑各种异常情况)。

层级结构

寄存器,高速缓存,内存,闪存,硬盘,磁带

Unknown

越顶端,速度越快,容量越小,价格越高。

RAID技术

单机存储系统如何做到高性能、高性价比、高可靠性

Redundant Array of Inexpensive Disks

  • 单块大容量磁盘的价格 > 多块小容量磁盘
  • 单块磁盘的写入性能 < 多块磁盘的并发写入性能
  • 单块磁盘的容错能力有限,不够安全

RAID 0

  • 多块磁盘简单组合
  • 数据条带化存储,提高磁盘带宽
  • 没有额外的容错设计

RAID 1

  • 一块磁盘对应一块额外镜像盘
  • 真实空间利用率仅50%
  • 容错能力强

RAID 0+1

  • 结合了RAID 0和RAID 1
  • 真实空间利用率仅50%
  • 容错能力强,写入带宽好

数据库

数据库分为关系型数据库,非关系型数据库

关系型数据库

关系: 任意元素组成的若干有序偶对,反应了事物间的关系

关系代数:对关系作运算的抽象查询语言,并、交、笛卡尔积等

SQL:一种DSL(Domain Specific Language领域专用语言),方便人类阅读的关系代数表达式

关系型数据库:是一种存储系统,在存储之外,又发展出其他能力(结构化数据友好,支持事务,支持复杂查询语言)

非关系型数据库

非关系型数据库也是存储系统,但是一般一要求严格的结构化。半结构化数据友好,可能支持事务,可能支持复杂查询语言

数据库 VS 经典存储

结构化数据管理

关系刑数据库以表的形式管理结构化数据。经典存储需要自行定义存储结构。

事务能力

数据库支持事务。事务具有原子性,一致性,隔离性,持久性。

复杂查询能力

数据库支持用灵活、简洁的查询方式。

主流存储产品

单机存储

本地文件系统

Linux经典哲学:一切皆文件

文件系统的管理单元:文件

文件系统接口:Ext2/3/4, sysfs, rootfs等,都遵循VFS的统一抽象接口

Linux文件系统的两大数据结构: Index Node和Directory Entry

Index node:记录文件的元数据。inode是一个文件的唯一标识,会被存储到磁盘上,innocd的总数在格式化文件系统的时间就确定了。

Directory Entry:记录文件名,innode指针,层级关系等,dentry是内在结构,与inode是n:1的关系。

Key-value存储

put(k, v) get(k)

常见数据结构: LSM-Tree牺牲读性能,追求写入性能。

拳头产品:RocksDB

分布式存储

在单机存储基础上实现了分布式协议,涉及大量网络交互。

可分为分布式文件存储和分布式对象存储两类。

  • HDFS
  • CEPH

单机数据库

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

关系型数据库

  • 商业产品:Oracle
  • 开源产品:MySQL、PostgreSQL

非关系型数据库

  • MongoDB 面向文档存储
  • Redis 数据结构丰富,超高性能,基于内存。
  • Elasticsearch 面向文档存储,实现大量搜索数据结构和算法

从单机到分布式数据库

  • 解决容量问题: 存储节点池化,支持动态扩缩容
  • 解决弹性问题
  • 解决性价比问题