一些常见的数据库相关概念的科普知识
数据持久化的过程:
- 检验数据合法性
- 内存中组织数据结构
- 以寿命&性能友好方式写入存储介质
存储系统:一个提供了读写和控制接口,能够安全有效地把数据持久化的软件。
存储系统和数据库不是一回事
存储系统常见的存储方式包括块存储、文件存储、对象存储、key-value存储
存储系统特点:性能敏感、硬件敏感、代码简洁(但异常处理必须全面)
性能方面:缓存很重要、拷贝很昂贵
RAID(Redundant Array of Independent Disks)出现原因:
- 单块大容量磁盘比多块小容量磁盘贵
- 单块磁盘写入性能不如多块磁盘并发写入性能
- 单块磁盘容错能力弱
RAID0(stripe), RAID1(mirror), RAID0+1(combined)
Relational Database:
-
Structured data structure
-
ACID transaction support
- Atomicity, Consistency, Isolation, Durability
-
SQL for complex query
DSL: Domain Specific Language
单机和分布式,关系型和非关系型
Linux中一切皆文件
- Index Node:记录文件元数据,文件的唯一标识
- 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专用计算