术语与基本概念

OLTP:Online Transaction Processing,在线事务处理,比如银行交易
OLAP:Online Analytical Processing,在线分析处理,比如一些推荐系统
RDBMS:Relational Database Management System
SQL:Structured Query Language
NoSQL:Not-Only SQL
Scale Up:单机性能
Scale Out:机器多
Transaction(简写TXN):事务

硬盘要避免随机写



数据模型(Data Models)

  • Relational Data:关系型数据库,表达起来比较直观简单。问题,数据冗余
  • Key-Values:键-值,hash 一下作为 key
  • Document:比如说 JSON
  • Graph:图
  • Columns:按照列去存储


CAP Theory

只能同时满足两个

  • Consistency(一致性,和 ACID 的 C 不一样):指副本必须是一致的
  • Availability(可用性)
  • Tolerance to network Partitions(切分性)



数据库类型

SQL

Structured Query Language


NoSQL

Not-Only SQL

为什么出现了 NoSQL?原因之一是 NoSQL 对集群支持很好,可以支持大规模节点

NoSQL 一般是弱一致性:Weak consistency


时序数据库


图数据库-Neo4j

NewSQL



存储(Storage)

Record 在 Page 中两种存储方式:

  • Packed Page:Page header(里有bitmap)+固定长的record
  • Slotted Page:Page Footer(里面记录每条record的长度)+变长的record

日志存储

Log-structed Files:LSM-Tree



索引(Index)

  • B-tree(可以区间查询)
  • Hash

事务(Transaction,TXN)及 ACID

  • Atomicity(原子性):不可分割,或成功或失败,无中间态
  • Consistency(一致性):前后一致,比如两个账号转账,转账钱和转账后总额一致
  • Isolation(隔离型):并发。当两个事务不相关时,保证可以并发,当相关时,需要保证并发时不会出现错误
  • Durability(持久性):永久存储




日志(Logging)实现 A 和 D


Force and Steal

  • Steal:允许事务在中途写到磁盘。那么失败时需要 undo
  • No-Steal:不允许。那么失败时不需要 undo
  • Force:事务每一条 commit 后都必须写到磁盘,那么失败时不需要 redo
  • No-Force:不需要每条都写到磁盘,先写到内存里,那么失败时需要 redo
  • 基本上都用 Steal 和 No-Force 了







Write-Ahead Logging(WAL)


CheckPoints


Buffer Pool

Recovery

并发控制(Concurrency Control)实现 I

  • 串行化:多个事务,内部保证顺序,但不保证事务的提交时间顺序
  • 线性化:一定按照提交时间出来。很难解决



脏读、不可重复读、幻读(Dirty|Unrepeatable|Phantom Read)




冲突(Conflict)

  • 读-读冲突(R-R Conflict)
  • 读-写冲突(R-W Conflict)
  • 写-写冲突(W-W Conflict)

要保证并发执行的效果和串行执行的效果一致

保证 RR 高并发,保证 RW 不出错,保证 WW 不丢失





锁(Lock)



乐观锁和悲观锁(OCC 和 PCC)

  • Optimistic concurrency control 乐观锁:就是先读出来,改完后看一下原数据有没有变动,如果有变动就不写回去,没变动再写回去
  • Pessimistic concurrencty control 悲观锁:就是传统的锁,用之前锁上,用完解锁




Two Phase Locking(2PL)

属于悲观锁。解决了 WW 冲突。

  • 2PL:将锁拿齐之后再做处理。在锁释放前,申请另一个锁
  • 严格2PL:最后再释放锁,这是为了中途 abort 方便恢复



锁管理(Lock Management)



死锁(Deadlocks)





Multi-Version Concurrency Control(MVCC)

允许读到的不是最新的数据。

解决了 RW 冲突。




存储方式(Storage)




垃圾回收(Garbage Collection)

优化器

行数估计

参考 TiDB 源码阅读系列文章(十二)统计信息(上)

欢迎留言>_<

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据