培养方向:分布式数据库研发
培养目标:
- 具备一定的软件工程能力
- 掌握基础数据结构和数据库关键技术
- 掌握分布式原理和应用开发
技能培养:
C++ / JAVA / GO 任选一门主力学习, Python 选修
- Git、Stencil、Visio 、Docker 等工具的使用
- 软件工程能力(代码规范、协作开发、UML 的使用、代码测试、文档撰写)
- Research、Presentation 能力
时间安排表:
- 第一学期
Week | Point | Detail | Project |
---|---|---|---|
1 | Database & Data Storage Introduction | 数据库架构和数据存储方向介绍 | |
2 | Transaction & Concurrency Control | 并发控制与事务恢复介绍 | |
3 | Query Optimization | 查询优化介绍 | |
4 | Big Data Computing | 大数据计算介绍 | |
5 | CMU-Buffer Pool | 以个人为单位,实现一个buffer pool,并测试其性能及内存占用。并撰写相关文档 | 项目地址 |
6-7 | CMU-Extendible Hash Index | 以个人为单位,在buffer pool的基础上,实现一个Hash Index,并测试其性能及内存占用。并撰写相关文档 | 项目地址 |
8-9 | CMU-Execution | 了解 SQL Engine 组件及功能,学习 SQL 解析流程及抽象语法树。学习执行算子,如 Join, Agg, Scan 的不同实现。了解基本的查询优化方法,了解 Volcano 及 Vectorized 执行器架构 | 撰写相关文档 实现数据库的执行器。项目地址 |
10-11 | CMU-Concurrency-Control | 理解事务的概念及产生原因、理解ACID特性 并发控制(乐观、悲观) 数据持久化和故障恢复(日志、检查点、快照) |
撰写相关文档 基于锁实现数据库的并发控制,要求保证事务的ACID特性 项目地址 |
12 | DataMining | 数据预处理(滤波、插值、降维) 关联分析 图挖掘,序列模式挖掘 |
1. 整理相关算法说明文档 2. 使用现有工具库分析图数据中的重要节点、社团关系等,并对结果进行展示 项目地址 |
13 | DeepLearning | 分类算法(KNN、贝叶斯、SVM、决策树) 聚类算法(kmeans、DBSCAN) 常用模型(CNN、RNN、LSTM) |
1. 整理相关算法说明文档 2. 使用机器学习和深度学习方法实现手写数字识别 3. 空气质量数据集进行预处理,使用深度学习方法,实现空气质量预测 项目地址 |
14 | NLP | Attention机制、Transformer、GAN 自然语言处理基础:分词、去除停用词、命名实体识别、预训练模型 |
1. 使用NLP工具实现命名实体识别 2. 搭建模型,实现情感分析 项目地址 |
15 | TinyKV-Standalone KV | 分布式相关概念、时钟 CAP、BASE 拜占庭问题 Zab Gossip |
实现单机的kv server Project1 StandaloneKV |
16 | TinyKV Raft KV 2A | 实现基础Raft协议 (1)Leader 选举 (2)日志复制 (3)RawNode 接口 |
Project2 RaftKV |
17 | TinyKV Raft KV 2B | 在 Raft 之上搭建一个容错的 KV 服务器 (1)PeerStorage (2)Raft ready process |
Project2 RaftKV |
18 | TinyKV Raft KV 2C | 增加 raftlog GC 和 snapshot 的支持 (1)Raft快照实现 (2)raftstore |
Project2 RaftKV |
19-20 | TinyKV Raft KV 3A&3B | 基于multi-raft实现可扩展的key-value server (1)对 Raft 算法实现成员变更和领导者变更 (2)在 raftstore 上实现Conf change和 region split (3)引入 scheduler |
Project3 MultiRaftKV |
21 | TinyKV Trasaction | 分布式事务(2PC / 3PC) 基于Percolator实现分布式事务,分析Percolaor的优缺点 |
Project 4 Transactions |
22 | TinySQL Simple explanation of SQL and relational algebra | 学习SQL语法及关系代数模型 Table Codec |
Project 1: Relational Algebra |
23 | TinySQL Parser | TinySQL解析器 | Project 2: Parser |
24 | TinySQL DDL | Data Definition Language (DDL) | Project 3: DDL |
25 | TinySQL Optimizer Part1 | 搜索框架 System R 和 Cascades | Project 4: TinySQL Optimizer |
26 | TinySQL Optimizer Part2 | 代价估算以及统计信息以及 Join Reorder | Project 4: TinySQL Optimizer |
27 | TinySQL Executor Part1 | 执行模型:火山模型和向量化 | Project 5: TinySQL Executor |
28 | TinySQL Executor Part2 | Hash Join | Project 5: TinySQL Executor |
29 | TinySQL Executor Part3 | Hash Aggregate | Project 5: TinySQL Executor |
30 | TinySQL Percolator | 实现协调者Percolator协议和完成SQL调用模块 | Project 6: TinySQL Percolator |
说明:整个学习流程的作业和文档需要在实验室 Github 仓库里面提交,每个 Project 会事先建立好框架,每个同学按照框架进行代码和文档的撰写。并且在代码过程中抽象公共代码库方便后续同学的使用,且需做好 todo-list,方便功能的完善。
-
第一次提交作业的时候请先
fork
当前项目到自己的仓库 -
在自己的仓库里面进行作业的更新
以第一次作业为例,比如你
fork
之后你的代码地址为git@github.com:ehds/training-plan.git
-
克隆仓库到本地:
git clone git@github.com:ehds/training-plan.git
-
进入当前实验文件夹
Week1-Databse-Introduction
cd Week1-Databse-Introduction
-
新建一个自己的文件夹,名字+实验名称,参考 Example
cp -r Example DongShengHe-Week1
完善实验文档 Markdown 文件
-
add 作业内容
git add .
-
commit 修改
git commit -m "message"
(message使用英文填写你所做的修改)如git commit -m “complete week1 experiment
-
push 分支
git push origin master
-
-
提交 PR
在 Gihub 仓库界面新建一个 pull request 到实验室仓库
-
审核与修改
待审核人审核后,根据修改意见进行修改,待通过后即可
大家遇到问题首先合理利用搜索引擎,网络上可能已经存在比较完美的解决方案
在向同学和老师提问的时候,请先描述问题出现的背景和出现问题的状况,这样更加有利于问题的解决。
请参考提问的智慧。