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

62 阅读3分钟

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

存储与数据库

数据的持久化:校验数据的合法性 -> 修改内存(用高效的数据结构组织数据) -> 写入存储介质(以寿命&性能友好的方式)

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


关系型数据库

关系 = 集合 = 任意元素组成的若干有序对
反映了事物间的关系 描述两个实体间的联系

关系代数 = 对关系作运算的抽象查询语言 (并、交、笛卡尔积)

关系型数据库在存储系统基础上,对结构化数据友好,支持事务(ACID特性),支持复杂查询语言

非关系型数据库

不要求严格的结构化 不一定支持事务与复杂查询语言


单机存储 —— 本地文件系统 Linux

文件系统的管理单元:文件
文件系统遵循VFS的统一抽象接口

Linux文件系统关键数据结构:

  • Index Node:记录文件元数据(如id、大小、权限、磁盘位置等)的节点 文件的唯一标识   inode总数在格式化磁盘时就固定了
  • Directory Entry:记录文件名、inode指针、层级关系(parent)   是内存结构 与inode是n对1关系

单机存储 —— Key-Value存储

常见使用方式:put(k,v) get(k)
常用数据结构:LSM-Tree(某种程度牺牲读性能,追求写入性能)

分布式存储

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

HDFS核心特点

  • 支持海量数据存储
  • 高容错性
  • 弱POSIX语义(并非支持POSIX全集)
  • 使用普通x86硬件

Ceph核心特点

  • 一切皆对象,基于对象发展了很多高级接口(块存储、文件存储)
  • 数据写入采用 主备复制(先写入主节点,再由主节点作链状的冗余复制)
  • 数据分布模型 采用 CRUSH算法(核心思想:哈希 + 权重 + 随机)

单机数据库

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

关系型

把数据以表的形式存储,然后在各个表间建立关系,通过这些表间的关系操作不同表之间的数据
使用SQL交互
核心组件:

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

关键内存数据结构:B -Tree、B+ -Tree、LRUList
关键磁盘数据结构:WriteAheadLog(RedoLog)、Page

非关系型

交互方式各不相同
没有固定的表结构 数据之间可以是独立的
没有关系约束后、schema相对灵活

从单机到分布式

单机数据库主要问题:容量、弹性、性价比