TinyKV是支持横向扩展,高可用,分布式事务的KV数据库。
- Raft模块,支持leader选举,leader转移,日志复制,单步成员的变更,快照的基础功能k。
- 采用Multi-Raft架构,数据基于Region进行分区,每一个region就是一个raft group,region支持数据规模较大时自动分裂,以及schedule调度。
- 实现了MVCC多版本控制,基于perculator模型设计了分布式事务系统,实现了快照隔离。
Snapshot隔离级别
TiDB优势:
- 纯分布式架构,拥有良好的扩展性,支持弹性扩缩容
- 支持SQL,对外暴露MySQL的网络协议,并兼容大多数的MySQL语法,在大多数场景下可以直接替换MySQL
- 默认支持高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务透明
- 支持ACID事务,对于一些有强一致性需求的场景友好,如转账
- 具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景
PD, TiDB, TiKV,
Server:
- 处理客户端的连接
- SQL语句的解析和编译
- 关系型数据与KV转化
- SQL语句执行
- 在线DDL执行
- 垃圾回收 TiKV:
- 数据持久化: Raft, RocksDB
- 分布式事务支持
- 副本的强一致性和高可用性
- MVCC:
- Coprocessor SQL语句 TiKV计算能力, PD:
- 整个集群TiKV的元数据存储
- 分配全局ID和事务ID
- 生成全局时间戳TSO
- 收集集群信息进行调度
- 提供TiDB Dashboard服务 TiFlash:
- 列式存储提高分析查询效率
- 支持强一致性和实时性, 支持实时更新
- 业务隔离
- 智能选择
隔离级别
- 读未提交
- 读已提交
- 可重复读
- 串行化 快照隔离目前的问题: (存在更严格的隔离级别)(快照隔离级别:读侵写,写侵写) 读已提交存在的问题:不可重复读,幻读问题 处理并发事务的通用手段
- 快照隔离:
Raft
与Paxos相比 特性:领导者选举,日志复制 核心功能: 工程中优势: 协议:Raft, Paxos, Zib? election 原理: leader, candidate,follower 任期,收到leader的日志 随机150~300ms, 领导者选举问题: 两个raft同步机制:日志:本身实际内容,日志索引,日志任期,领导者节点记录, appendEntryRPC上一条日志,将上条日志信息跟此条对比,若无冲突,接受,否则拒绝并返回index索引,找到冲突日志,日志复制成功,接受成功,更新index, raft同步rpc:appendEntryRPC和heartbeatRPC 冲突之后处理,优化 Multi-raft,从单机扩展所用改进: 如果不用multi-raft,存储容量受单机限制,数据并行分片,分为不同的raft group,每一个处理不同的 有一些raft group -> region,分裂,解决 storage engine: rocks DB, level DB,核心模块:K/V存储 raft 功能(用到什么业务):日志备份,数据存储, 并发控制:事务处理 (MVCC)分布式事务:perculator基于单行事务实现,2阶段提交的协议, 2pc,提供了5种列族, default,列族由实际数据+开始时间 lock, 锁标记,版本号,开始时间, write 开始时间,default 实际数据
2PC机制:write; commit 2pc问题:宕机 master follow 主机宕机 停顿 3PC/perculator改进, perculator优化地方 perculator:改进的2pc
数据持久化逻辑:如何保证ACID种D逻辑,异常情况下的数据保证,内存中的数据保证不丢失,(innodb通过redo log保证数据不丢失) innodb在什么时机写入redo log: 如何保证redo log容量,如何利用空间,写入之后 Checkpoint,同步到磁盘上, redo log和bin log的区别,redo 修改操作,二进制日志记录(物理,逻辑,物理逻辑混合)
MySQL主从:缓冲池BufferPool,基本逻辑,page从bufferpool 中, 首先判断page是否存在, 磁盘如何决定 根据时空局部性,从磁盘上预取,放到缓冲池中,(问题:数据存不下: LRU? 从磁盘上读,但bufferpool已经满了,此时处理方式
存储引擎索引:tinykv索引,索引的目的: 对读友好的索引: 写友好索引:B+, LSMTree,RB,AVL 索引本质:数据结构 选择索引的 Hash不支持范围查找,只支持单个key查询,B+ 叶节点双向链表 RB树叶节点加双向链表问题: 层高 RB 二叉,B+多叉树,B+降层高,查询降低IO次数。
有序数据范围查找,Redis用跳表,作为索引,B+降层高 内存不需要降层高
rocksdb特性: 分布式:join如何做 join优势与问题:联表查询,通过另外一张表通过主键查询 性能优化原则:小表驱动大表
- 点到为止,关键地方,简明扼要
- raft做什么,架构层面,每个模块间如何关联
- 在存储引擎中所占比重
- MVCC, 2PC,技术优点、缺点、选用原因(匹配度)
- 隔离级别,快照隔离级别
Raft位于存储引擎上方 日志交由状态机存储,到存储引擎,中心控制中间件,调度
不使用一致性协议实现分布式事务,Aurora,多个空间换取数据的一致性。
存储引擎,tinykv和tikv的区别,关键挑战
kv sql pd(placement driver)