数据库
使用数据库的目的:
- 数据持久化
- 校验数据合法性
- 高效组织数据结构,用于写入内存
数据持久化:
- 使用持久内存
- 校验数据合法性
- 使用高效数据结构组织内存写入
其他关键概念:
-
持久内存
-
缓存贯穿整体系统,拷贝昂贵且需要CPU
-
RAID(廉价磁盘冗余阵列):
- RAID 0:简单组合,数据条带化存储,提高磁盘带宽,无容错
- RAID 1:每块磁盘对应容错盘,空间利用率50%
关系型数据库
- 关系:由集合构成,包含有序的偶对元素
- 关系代数:抽象查询运算,包括交、并、笛卡尔积等
- SQL(DSL):方便阅读的查询语言
- 结构化数据,支持ACID事务,用表格存储
事务 ACID
- A:原子性,要么全做要么不做
- C:一致性,执行前后数据状态一致
- I:隔离,隔离多个并发事务
- D:事务提交后保证持久性
非关系型数据库
- 半结构化,不必支持事务/SQL
存储与数据库
单机存储
- Linux VFS接口,inode、文件目录项
- 本地K-V存储,LSM-Tree追求写入,RocksDB顺序写入
- 内存表满后转为Immutable,存入磁盘level0 SStable
- 磁盘level0升级到level 1 SStable
分布式 HDFS
- 支持海量数据存储,高容错性,弱POSIX语义
- 管理节点→存储节点
- Ceph:一切皆对象,主备复制模型,CRUSH hash权重随机选择存储服务器
单机数据库
- 关系型数据库:Oracle、MySQL、PostgreSQL
- 通用组件:查询引擎、事务管理、锁管理、存储引擎、主备同步
- 内存数据结构:B-Tree、B+ Tree、LRU列表
- 磁盘数据结构:Write-Ahead Log(Redo Log)、Page
节点更新时首先记录Redo Log,除此还有临时数据,磁盘内与内存内类型对应
非关系型数据库:MongoDB、Redis,交互方式不同,灵活的模式,尝试支持SQL子集和事务
分布式数据库
- 单节点容量有限,受硬件限制,分布式池化,动态扩容
新技术演进
- SPDK绕过操作系统内核,在用户态访问磁盘,避免系统调用开销
- 绑定CPU核进行轮询,减少系统调用切换
- 使用无锁数据结构,降低并发时的同步开销
AI
高性能硬件