最基础功能的引擎
- 如何在内存通过B+Tree保存KV数据并快速检索
- 如何在磁盘通过B+Tree保存KV数据并快速检索
- 数据集很大,如何统一内存和磁盘B+Tree
- 如何在B+Tree上查找一个Key
- Key数量增加,如何在内存和磁盘分裂B+Tree
- Key数量减少,如何在内存和磁盘合并B+Tree
- 如何管理B+Tree的内存Page,以及如何管理空闲内存
- 如何管理B+Tree的磁盘Page(Extend),以及如何管理空闲磁盘(Extend)
- 如何管理数据库里的多个B+Tree,每个B+Tree的元信息是什么,数据库的元信息是什么
带日志功能的引擎
- 如何保证修改不会丢失
- 为什么不直接将修改的数据直接落盘
- 如何在持续有写入的情况下做全量数据落盘(checkpoint)
- 如何从全量数据及日志中恢复完整的数据
- WriteConcern参数里j的作用是什么
MVCC
- MVCC(Multi-Version Concurrency Control )是什么,为什么需要引入MVCC
- MVCC里面的Version是什么,在WT引擎里,用什么表示Version
- MVCC里面的每个Version的Value,是如何保存在内存中的,磁盘上是否有多版本
- MVCC里面的snapshot是什么,WT是如何实现snapshot的,以及它是如何控制可见性和写写冲突的
MVCC对引擎的影响
- MVCC如何影响B+Tree上查找Key
- MVCC如何影响B+Tree上插入Key
- MVCC如何影响B+Tree上修改Key
- MVCC如何影响B+Tree上删除Key
- MVCC如何影响B+Tree的分裂和合并
- MVCC如何影响B+Tree的落盘(checkpoint)
- WT引擎里面如何提高B+Tree的并发度
MongoDB分布式
- MongoDB复制集是什么
- Raft协议是什么
- Oplog是什么
- MongoDB的Raft跟论文Raft有什么区别
- WriteConcern参数是为了解决什么问题
- ReadConcern参数是为了解决什么问题
- HLC时钟是什么
- 因果一致性Session是什么
- ChangeStream实现机制
MongoDB分布式对引擎的影响
- MongoDB分布式对WT引擎的MVCC模块的影响是什么
- MongoDB分布式对全量数据落盘(checkpoint)的影响是什么
- MongoDB分布式里的Oplog与WT引擎的WAL日志的关系和区别是什么
事务
- 常见的4种事务隔离级别是什么
- Snapshot隔离是什么
- Snapshot与串行化的区别
- 如何保证数据+索引+Oplog的完整性
- uncommit/commit/abort事务对MVCC引擎的影响是什么
- MongoDB分布式对事务的影响
Evict & Reconcile
- 为什么需要evict
- evict是3种方式?
- dirty page evict后会怎么样?
- evict对checkpoint的影响?
- evict与 分布式+MVCC 的影响?(事务可见性)
- 为什么需要Reconcile
- 一个内存page会对应多个磁盘page吗
锁与并发
- 引擎层提高并发的机制有哪些(至少3点)
- HP是如何工作的,WT引擎哪些地方用到HP
- CAS是如何工作的,WT引擎哪些地方用到CAS
- COW/ROW是如何工作的,WT引擎哪些地方用到COW/ROW
- gen是如何工作的
多Shard
- 分布式事务实现方式有哪些
- chunk分裂流程
- chunk搬迁流程
- 多Shard对备份的影响
- 多Shard对分布式Oplog/WAL的影响
LST/PST
- 为什么要做计算存储分离
- LST实现方式是什么
- PST实现方式是什么
- API接口是什么
- Log shipping流程是什么
- Page merge delta的场景,什么时候调用apply接口