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

108 阅读3分钟

一些常见的数据库相关概念的科普知识

数据持久化的过程:

  1. 检验数据合法性
  2. 内存中组织数据结构
  3. 以寿命&性能友好方式写入存储介质

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

存储系统和数据库不是一回事

存储系统常见的存储方式包括块存储、文件存储、对象存储、key-value存储

存储系统特点:性能敏感、硬件敏感、代码简洁(但异常处理必须全面)

性能方面:缓存很重要、拷贝很昂贵

RAID(Redundant Array of Independent Disks)出现原因:

  • 单块大容量磁盘比多块小容量磁盘贵
  • 单块磁盘写入性能不如多块磁盘并发写入性能
  • 单块磁盘容错能力弱

RAID0(stripe), RAID1(mirror), RAID0+1(combined)

Relational Database:

  1. Structured data structure

  2. ACID transaction support

    1. Atomicity, Consistency, Isolation, Durability
  3. SQL for complex query

DSL: Domain Specific Language

单机和分布式,关系型和非关系型

Linux中一切皆文件

  1. Index Node:记录文件元数据,文件的唯一标识
  2. Directory Entry:文件名、inode指针、层级关系等,属于内存架构

key-value存储常见数据结构:LSM-Tree,牺牲了读性能,追求写性能。

HDFS(Hadoop Distributed File System):大数据时代基石

  • 海量数据存储
  • 高容错性
  • 弱POSIX语义
  • 便宜服务器

Management Node & Storage Node

Ceph也是著名的开源分布式存储系统,但一切皆对象,主备复制写入,CRUSH算法分布。

关系型数据库中,ToB: Oracle, Others: MySQL & PostgreSQL

通用组件:

  • Query Engine
  • Txn Manager(Transaction)
  • Lock Manager
  • Storage Engine
  • Replication(主备同步)

关键内存数据结构:

  • B-Tree
  • B+Tree
  • LRU List

关键磁盘数据结构:

  • WriteAheadLog(RedoLog):记录事务操作
  • Page
  • Others:临时数据

非关系型数据库:MongoDB, Redis, Elasticsearch三足鼎立

交互方式各不相同(一般不使用SQL),但在尝试支持SQL子集和事务

  • Elasticsearch

    • 面向文档,支持json和嵌套,index=文档集合
    • 存储和构建索引依赖Lucene搜索引擎
    • 支持RESTFUL API,支持弱SQL交互
    • 模糊匹配搜索查询能力很强,还内嵌关联程度算法
  • MongoDB

    • 面向文档,支持json/bson和嵌套,collection=文档集合
    • 存储和构建索引依赖wiredTiger引擎(纯C)
    • 支持事务和多文档操作,常用client/SDK/支持弱SQL插件交互
  • Redis

    • 数据结构丰富,C语言实现,基于内存超高性能
    • 支持AOF/RDB持久化
    • 常用redis-cli/多语言SDK交互

分布式:容量、弹性、性价比

新技术演进:

  • 软件架构变更:Bypass OS kernel

    • SPDK(Storage Performance Development Kit)
    • 内核态到用户态;中断到轮询(磁盘性能提高);无锁数据结构
  • AI:智能存储格式转换

    • 行列混存决策
  • 硬件革命:存储介质、计算单元、网络硬件

    • RDMA网络:用户态虚拟内存映射给网卡,减少拷贝和CPU开销
    • Persistent Memory:介于SSD和Memory之间
    • 可编程交换机:缓存一致性协议
    • CPU从multi-core到many-core;CPU;DPU专用计算