第8课笔记:存储&数据库系统|青训营

105 阅读9分钟

Class8:存储&数据库

经典案例:新app注册登录

一条数据从产生,到数据流动,最后持久化的全生命周期

  • 数据的产生:填写注册信息,建立账户
  • 数据流动:一条结构化用户注册数据,包括账户,密码等 -> 到达后端服务器 -> 到达数据库(其他系统支持)
  • 数据持久化:校验数据合法性(账号原本是否存在)-> 修改内存 -> 写入存储介质(寿命&性能友好)

问题:数据库如何保证数据不丢?如何处理多人同时修改问题?除了数据库,还有别的存储系统吗?有。数据库只能处理结构化数据?不是(非结构化数据如何存储)。有哪些操作数据库的方式,要用什么编程语言?

存储&数据库简介

存储系统:提供读写、控制类接口,能安全有效把数据持久化的软件,即可称为存储系统(用户、介质、内存、网络)

系统特点:性能敏感(后端系统底座)、易受硬件影响(存储系统软件架构)、代码即简单(读写)又复杂(IO异常分支处理系统)

存储器的层级结构:金字塔塔尖:特定存储设备(容量极小,支撑超高性能),塔底:容量很大,但性能较差(tape磁带),persistent memory:兼顾持久化存储与内存存储

数据怎么从应用到存储介质:缓存cache(很重要,贯穿存储体系,尤其是跨软件层,以硬件友好的方式交互)、拷贝(昂贵,尽量减少)、需要抽象统一的接入层 - Disk(硬件存储)

存储系统 - RAID技术

RAID:Redundant Array of Inexpensive Disks

单机存储系统高性能、高性价比、高可靠性

背景:单块磁盘的性价比、性能、容错能力都小于多块磁盘

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

RAID1:一块磁盘对应一块额外镜像盘、真实空间利用率仅50%,但容错能力强。与RAID0是两个极端

RAID 0+1:结合RAID0和1(4块磁盘,两两以RAID0连接,再用RAID1连接这两对磁盘,或者反向,向连RAID1,再连RAID0),真实空间利用率为50%,容错能力强,写入带宽好

数据库

  • 关系型数据库

关系:集合

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

SQL(Structured Query Language,结构化查询语言):一种DSL(Domain-specific Language,领域专业语言),方便人类阅读的关系代数表达形式

关系型数据库的特点:结构化数据友好,支持事务(ACID四个特性),支持复杂查询语言(SQL)

  • 非关系型数据库

一般不要求严格的结构化

特点:半数据化结构友好,可能支持事务(ACID),可能支持复杂查询语言(SQL)

数据库 vs 经典存储 - 结构化数据管理

关系型数据库:一条结构化用户注册数据 -> 写入关系型数据库,以表形式管理

经典存储:写入文件,自行定义,管理结构,定义数据结构,结构体(总长度,4 byte,下一字段长度,字段,长度,字段,长度,字段...)

  • 事务能力:数据库支持事务

事务具有的四个特性:ACID

  1. Atomicity:事务内操作(插入,更新,查询)要么全做,要么不做

  2. Consistency:事务执行前后,数据状态是一致的(转账前后,总钱数不变,A减少,则B增加)

  3. Isolation:可以隔离多个并发事务,避免影响(与隔离级别也有关系)

  4. Durability:事务一旦提交成功,数据保证持久性

  • 复杂查询能力:数据库更简洁、灵活

可以理解为,存储系统为word,数据库为excel,对于结构化数据的查询,添加数据等事务操作,存储写入等excel更简洁高效

主流产品剖析

单机存储

单机存储:单个计算机节点上的存储软件系统,一般不涉及网络交互

  • 本地文件系统

管理单元:文件

文件系统接口:Ex2/3/4,sysfs,rootfs等繁多文件系统均遵循VFS的统一抽象接口

Linux文件系统的两大数据结构:Index Node(记录文件元数据,包括id,大小,权限,磁盘位置等,index是一个文件的唯一标识),Directory Entry(记录文件名、index指针,层级关系等,dentry是内存结构,与index的关系是N:1)

  • key-value存储

key:身份证

value:内涵

常见使用方式:put(k, v) & get(k)

常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能,顺序写入,持续追加,内存某一块写满,即写入磁盘level1,然后到level2,持续下压,读入要一层一层读

拳头产品:RocksDB

分布式存储

分布式存储:单机存储基础上实现分布式协议,设计大量网络交互

  • 分布式文件系统

HDFS: 大数据时代基石

背景:专用高级硬件很贵,数据存量很大,要求超高吞吐(单个大的很贵,用很多个便宜的组装起比较便宜)

HDFS核心特点:支持海量数据存储,高容错性,弱POSIX语义,使用普通x86服务器,性价比高

management Node (NameNode) -> Storage Node (DataNode)

  • 分布式对象存储

Ceph: 开源分布式存储系统中的万金油

核心特点:一套系统支持对象接口、块接口、文件接口,但一切皆对象。数据写入采用主备复制模型(先写入主节点,再通过主节点进行链状的多副本冗余复制)。数据分布模型采用CRUSH(Hash+权重+随机抽签)算法

单机关系型数据库

单机数据库:单个计算机节点上的数据库系统

事务在单机内执行,也可能通过网络交互实现分布式事务

商业产品Oracle

开源产品MySQL & PostgreSQL

关系型数据库的通用组件:

  • Query Engine —— 负责解析query,生成查询计划
  • Txn Manager —— 负责事务并发管理
  • Lock Manager —— 负责锁相关的策略
  • Storage Engine —— 负责组织内存/磁盘数据结构,进行高性能读写
  • Replication —— 负责主备同步

关键内存数据结构:B-Tree、B+-Tree LRU List等

关键磁盘结构:WriteAheadLog(RedoLog)、Page

在内存中,数据以Page数据结构树状存储在内存,进行修改操作时,会写一条Re do log,并会产生临时文件

在磁盘中,有三类文件,Page Files对应树状图的一个Page数据结构,Redo Log Files对应Redolog,Others对应临时文件

单机非关系型数据库

MongoDB、Redis、Elasticsearch三足鼎立,特点:

  • 关系型数据库一般直接使用SQL交互,而非关系型数据库交互方式各不相同
  • 非关系型数据库的数据结构千奇百怪,没有关系约束后,schema相对灵活
  • 不管是否是关系型数据库,都在尝试支持SQL(子集)和“事务”

Elasticsearch:

  • 面向文档存储,
  • 文档可序列化为JSON,支持嵌套
  • 存在“index”,即文档的集合
  • 存储和构建索引能力依赖Lucene引擎
  • 实现了大量搜索数据结构&算法
  • 支持RESTFUL API,也支持弱SQL交互

案例:小明在注册的app上发了一个帖子“C++编程有点难”,会变为结构化数据存储。

小李在app上搜索“编程语言哪个好,哪个难度大?”会以“编程语言,好,难度”等关键词进行模糊搜索/匹配,就会把小明的帖子反馈给小李,这正是Elasticsearch擅长的

特点:与关系型数据库(RDBMS: Relational Database Management System)相比,ES(Elasticsearch)天然能做模糊搜索,还能自动计算出关联程度

MongoDB:灵活

  • 面向文档存储
  • 可序列化成JSON/BSON,支持嵌套
  • 存在collection,即文档的集合
  • 存储和构建索引能力依赖wiredTiger引擎
  • 4.0后开始支持事务(多文档、跨分片多文档等)
  • 常用client/SDK交互,可通过插件转译支持弱SQL

Redis

  • 数据结构丰富(Hash表、set、zset、list)
  • C语言实现,超高性能
  • 主要基于内存,但支持AOF/RDB持久化
  • 常用redis-cli/多语言SDK交互

分布式数据库

问题:容量、弹性、性价比

  • 容量:单点容量有限,受硬件限制,解决方案:存储节点池化,动态扩缩容
  • 弹性:原本数据库比较小,但随着业务增加,CPU资源紧张,不够用了,进行扩容,搬迁全量数据,扩容成功,访问新数据库,后来又需要缩容,搬数据到硬盘难以解决。池化可以解决存储空间扩缩容问题。
  • 性价比:一个16核往往配100G的容量,但要写500G数据,则CPU利用率仅为20%,若加为32核,1TB容量,容量够,但CPU利用率仅为10%(核数加倍,利用率减半)。磁盘容量池化后(可动态扩容),可以利用16核CPU配池化的500G容量,提高性价比。

其他问题:单写 vs 多写;从磁盘弹性到内存弹性;分布式事务优化

存储与数据库新技术

新架构/新硬件/新理论/人工智能

  • 软件架构变更:Bypass OS kernel趋势:SPDK,User Space、轮询、无锁数据结构
  • AI增强:智能存储格式转换:数据存储格式是转换,行存/列存 -> 行列混存(AI辅助实时决策)
  • 硬件革命:存储介质变更、计算单元变更、网络硬件变更

高性能硬件:

  • RDMA网络
  • Persistent Memory
  • 可编程交换机
  • CPU/GPU/DPU(异构计算)(计算单元的变革)

总结

存储系统 - 数据库系统 - 分布式架构,由硬件反推软件变革

存储系统为word,数据库为excel,对于结构化数据的查询,添加数据等事务操作,存储写入等excel更简洁高效,分布式则是池化磁盘空间,固定的核数下,提供动态磁盘空间的扩缩容。