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

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

一、经典案例

首先,一条数据由客户端产生,然后经过网络将其发送给后端服务器,经过整理最后将其保存到数据库进行持久化。如图所示:

image.png

其中需要考虑的问题:

  • 需要保证数据库的数据不丢失
  • 数据库被多人同时修改数据需要保持一致性
  • 怎样适配另外的存储系统
  • 怎样存储非结构化的数据
  • 需要怎样去操作数据库

二、存储与数据库简介

1.存储系统

1.存储系统的概念

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

  • 存储系统

    • 作为后端底座,需要性能敏感
    • 存储系统软件架构,容易受硬件影响
    • 存储系统代码,既“简单”又“复杂"

2.存储器层级结构

image.png

层级金字塔顶端的存储系统有更小的容量,速度更快,价格更高。层级越往下,存储系统容量更大,速度更慢,价格更低。

3.数据从应用到存储介质

image.png

4.RAID 技术

是让单机存储系统做到高性能、高性价比、高可靠性的一类技术,展开就是:

R(edundant) A(rray) of l(nexpenswe) D(isks)

2.数据库

 关系型数据库和非关系型数据库都是存储系统,但关系型数据库一般有严格的结构化,非关系型数据库便没有这个限制

 相对于经典存储,数据库能够进行结构化的数据管理,具有处理事务的能力,并且具有复杂的查询能力。

数据库的使用方式一般是通过 DSL(领域特定语言)去操作,比如 SQL 就是比较通用的 DSL。

三、主流产品

1.单机存储

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

1.本地文件系统

形如 Linux 文件系统。

文件系统的管理单元是文件,文件系统的接口繁多,如 Ext2/3/4,sysfs,rootfs 等,都遵循 VFS 的统一抽象接口,Linux 文件系统有两大数据结构:Index Node 和 Directory Entry。Index Node 用来记录文件元数据,如 id、大小、权限、磁盘位置等,inode 是一个文件的唯一标识,会被存储到磁盘上 inode 的总数在格式化文件系统时就固定了。Directory Entry 用来记录文件名、inode 指针,层级关系 (parent) 等,dentry 是内存结构,与 inode 的关系是 N:1( hardlink 的实现 )。

2.key-value 存储

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

拳头产品:RocksDB。

2.分布式存储

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

代表产品有:HDFS、Ceph。

3.单机关系型数据库

商业产品 Oracle 称王,开源产品 MySQL & PostgreSQL 称霸。

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

    • Query Engine:负责解析 query,生成查词计划
    • Txn Manager:负责事务并发管理
    • Lock Manager:负责锁相关的策略
    • Storage Engine:负责组织内存和磁盘数据结构
    • Replication:负责主备同步
  • 关键内存数据结构:B-Trees、B+ -Tree、LRU List 等

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

4.单机非关系型数据库

MongoDB、Redis 、EIasticsearch 三足鼎立。

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

1.EIasticsearch

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

2.MongoDB

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

3.Redis

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

5.分布式数据库

相对于上面的数据库,分布式数据库需要以下问题:

1.解决容量问题

单点的容量有限,受硬件限制,可以将存储节点池化,进行动态的扩缩容。

2.解决弹性问题

动态的扩缩容。

3.解决性价比问题

有些单点的存储和处理能力不平衡,资源利用率低。

四、新技术

1.软件架构变更:Bypass OS kernel 绕过操作系统内核

  • SPDK

image.png

2.Al 增强:智能存储格式转换

image.png

3.新硬件:存储介质、计算单元、网络硬件的变更

  • 高性能硬件

image.png


主要介绍了存储系统的知识,从数据怎样去存储到单机的结构化数据,再到分布式的非结构化数据,层层深入和演化,最后对能够提高存储系统性能的新技术的进行了展望。从宏观层面拓宽了我对所用数据库的理解。