摘要 | 第4-5页 |
Abstract | 第5页 |
第一章 绪论 | 第8-12页 |
1.1 研究背景与意义 | 第8-9页 |
1.1.1 LSM、LevelDB和RocksDB | 第8-9页 |
1.1.2 分形树和TokuDB | 第9页 |
1.2 国内外研究现状 | 第9-10页 |
1.2.1 对写性能的优化 | 第9-10页 |
1.2.2 对查询性能的优化 | 第10页 |
1.3 论文主要工作 | 第10-11页 |
1.4 本文的结构安排 | 第11-12页 |
第二章 相关技术介绍 | 第12-19页 |
2.1 B树 | 第12-13页 |
2.1.1 传统的B树 | 第12页 |
2.1.2 B树的问题和优化 | 第12-13页 |
2.2 LSM树、LevelDB和RocksDB | 第13-15页 |
2.2.1 LSM树 | 第13页 |
2.2.2 LevelDB和RocksDB | 第13-14页 |
2.2.3 LSM树及LevelDB等变体的问题 | 第14-15页 |
2.3 分形树 | 第15-16页 |
2.3.1 分形树的基本结构 | 第15-16页 |
2.3.2 分形树的问题 | 第16页 |
2.4 追加树 | 第16-18页 |
2.4.1 LSM-trie树 | 第16-17页 |
2.4.2 FLSM树 | 第17页 |
2.4.3 LWC树 | 第17-18页 |
2.4.4 追加树共有的问题 | 第18页 |
2.5 本章小结 | 第18-19页 |
第三章 日志结构的追加树 | 第19-25页 |
3.1 LSA树的基本结构 | 第19页 |
3.2 MSTable结构设计 | 第19-20页 |
3.3 LSA树的操作 | 第20-24页 |
3.3.1 刷新 | 第21-22页 |
3.3.2 分裂 | 第22-23页 |
3.3.3 合并 | 第23页 |
3.3.4 分裂的最大频率和写放大 | 第23-24页 |
3.4 本章小结 | 第24-25页 |
第四章 集成追加归并树 | 第25-31页 |
4.1 刷新操作 | 第25-27页 |
4.1.1 简单的刷新操作 | 第25页 |
4.1.2 优化的刷新操作 | 第25-26页 |
4.1.3 参数选取算法 | 第26-27页 |
4.2 用户操作 | 第27-28页 |
4.3 放大分析 | 第28-29页 |
4.3.1 写放大分析 | 第28页 |
4.3.2 读放大分析 | 第28-29页 |
4.3.3 空间放大分析 | 第29页 |
4.4 多线程支持和并行优化 | 第29-30页 |
4.4.1 放宽Ni的条件 | 第29-30页 |
4.4.2 放宽刷新条件 | 第30页 |
4.5 本章小结 | 第30-31页 |
第五章 树的实现 | 第31-44页 |
5.1 树的实现与逻辑结构的区别 | 第31页 |
5.2 多版本并发控制的组织结构 | 第31-33页 |
5.3 多线程支持 | 第33-36页 |
5.3.1 线程模型 | 第33-34页 |
5.3.2 数据库实例的回调函数 | 第34-36页 |
5.3.3 死锁分析 | 第36页 |
5.4 选取后台操作 | 第36-38页 |
5.5 执行磁盘操作 | 第38-39页 |
5.6 LogAndApply操作 | 第39-41页 |
5.7 数据库打开和用户读写操作 | 第41-43页 |
5.8 本章小结 | 第43-44页 |
第六章 实验与分析 | 第44-53页 |
6.1 实验环境搭建 | 第44-45页 |
6.2 哈希加载 | 第45-47页 |
6.3 写密集型工作负载 | 第47-48页 |
6.4 读密集型工作负载 | 第48-49页 |
6.5 短时间遍历 | 第49-51页 |
6.6 顺序写和长距遍历 | 第51页 |
6.7 磁盘空间使用情况 | 第51-52页 |
6.8 不同追加树的说明 | 第52页 |
6.9 本章小结 | 第52-53页 |
第七章 总结与展望 | 第53-54页 |
7.1 总结 | 第53页 |
7.2 展望 | 第53-54页 |
参考文献 | 第54-58页 |
致谢 | 第58-59页 |