数据库与存储 | 青训营

137 阅读5分钟

数据库

对数据进行持久化,那么应该先要检查数据的合法性,然后修改内存,用高效的数据结构存储数据,最后写入存储介质,以寿命&性能友好的方式写入硬件。

存储&数据库简介

存储系统

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

系统特点:

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

存储器层级结构 存储器层级结构.png

数据怎么从应用到存储结构呢,需要注意些什么?

  • 「缓存」很重要,贯穿整个存储体系
  • 「拷贝」很昂贵,应该尽量减少
  • 硬件设备五花八门,需要有抽象统一的接入层

RAID技术: R(edundant)A(rray) of I(nexpensive)D(isks)
RAID出现的背景:

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

RAID 0

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

RAID 1

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

RAID 0 + 1

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

数据库

数据库分为关系型数据库和非关系型数据库。

关系型数据库

关系型数据库是存储系统,但是在存储之外,又发展出其他能力。

  • 结构化数据友好
  • 支持事务(ACID)
  • 支持复杂查询语言

菲关系型数据库

非关系型数据库也是存储系统,但是一般不要求严格的结构化。

  • 半结构化数据友好
  • 可能支持事务(ACID)
  • 可能支持复杂查询语言

数据库 VS 经典存储

对比方向数据库经典存储
存储写入关系型数据库,以表形式管理写入文件,自行定义管理结构
事务具有事务能力,有ACID特性没有事务能力
复杂查询能力灵活、简洁僵化、复杂

主流产品

单机存储

单机存储=单个计算机节点上的存储软件系统,一般不涉及网络交互,主要由本地文件系统和KV存储。

文件系统的管理单元:文件
文件系统接口:文件系统繁多,如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的实现)

KV存储:

  • 常用使用方式有put方法和get方法。
  • 常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能。
  • 拳头产品: RocksDB

分布式存储

分布式存储=在单机存储基础上实现了分布式协议,涉及大量网络交互。主要存储方式也是两种,分布式文件系统和分布式对象存储。

HDFS:Hadoop Distributed File System
HDFS 是一种分布式文件系统,用于处理在商业硬件上运行的大型数据集。 它用于将单个 Apache Hadoop 集群扩展到数百 (甚至数千)个节点。 HDFS 是 Apache Hadoop 的主要组件之一,其他组件包括 MapReduce和 YARN。 HDFS 不应与 Apache HBase 混淆或被 Apache HBase 取代,Apache HBase 是一个面向列的非关系数据库管理系统,它位于 HDFS 之上,可以通过其内存处理引擎更好地支持实时数据需求。

特点;

  • 支持海量数据存储
  • 高容错性
  • 弱POSIX语义
  • 使用普通x86服务器,性价比高

Ceph: Ceph在一个统一的系统中独特地提供对象、块和文件存储。Ceph 高度可靠、易于管理且免费。Ceph 的强大功能可以改变您公司的 IT 基础架构和管理大量数据的能力。Ceph 提供了非凡的可扩展性——数以千计的客户端访问 PB 到 EB 的数据。ceph存储集群相互通信以动态复制和重新分配数据。

特点:

  • 一套系统支持对象接口、块接口、文件接口,但是一切皆对象4020
  • 数据写入采用主备复制模型
  • 数据分布模型采用CRUSH(HASH+权重+随机抽签)算法

单机关系型数据库

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

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

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

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

关键内存数据结构: BTree、B+Tree、LRU List等
关键磁盘数据结构:WriteAheadLog ( RedoLog)、 Page

单机非关系型数据库

MongoDB、Redis、Elasticsearch三足鼎立

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

image.png (来源于青训营)

分布式数据库

分布式解决单机容量限制的问题,由于单点容量有限,受硬件限制,存储节点池化、动态扩缩容。

分布式解决弹性的问题,动态扩容缩容

分布式解决性价比的问题,CPU利用率