Skip to content

Commit

Permalink
add talent plan 1.0 (#344)
Browse files Browse the repository at this point in the history
  • Loading branch information
Soline324 committed May 4, 2020
1 parent a401cd1 commit bcfb2a8
Show file tree
Hide file tree
Showing 4 changed files with 188 additions and 0 deletions.
Binary file added media/execution-example.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
93 changes: 93 additions & 0 deletions talent-plan-1.0/1.0-lp-tidb.md
@@ -0,0 +1,93 @@
# 路径 1:TiDB 方向

## 课程目标
* 掌握 Go 语言
* 掌握分布式计算基本原理
* 掌握数据库基础知识
* 掌握优化器和执行引擎基本原理

## 课程内容

### Section 1 熟悉 Go 语言基础知识

**学习资料:**

* 阅读许老师的书 [《Go 语言开发》](https://book.douban.com/subject/11577300/)
* [Go 官方教程](http://tour.golang.org/)
* [Effective Go](https://golang.org/doc/effective_go.html)
* [Profiling Go Programs](https://blog.golang.org/profiling-go-programs)

**课程作业:**

* 用 Go 语言实现一个多路归并的 Merge Sort:内存中有一个无序的 int64 数组,数组中有 16M 个整数,要求使用多个 goroutine 对这个无序数组进行排序,使得有元素按照从小到大的顺序排列,并且排序的性能需要比单线程 Quick Sort 快。
* 根据[框架](https://github.com/pingcap/talent-plan/tree/master/tidb/mergesort)完成程序,**要求跑通测试程序,并使用 Go Profile 工具分析性能瓶颈。需要有文档、单元测试、性能瓶颈分析。**

### Section 2 分布式计算基础知识

**学习资料:**

* 学习并使用 Go 语言完成 [6.824 Lab 1: MapReduce](https://pdos.csail.mit.edu/6.824/labs/lab-1.html)

**课程作业:**

* 使用 Go 语言,使用框架代码,用 MapReduce + Shuffle 的方式完成作业:从包含大量 URL 的数据文件中,求出现次数最多的前 10 个 URL 和他们的出现次数,尽量利用 CPU 多核特性和内存资源。
* 根据[作业框架](https://github.com/pingcap/talent-plan/tree/master/tidb/mapreduce)完成作业,详细的作业要求、框架的使用方法和评分规则请看框架的 README 文件

### Section 3 数据库基础知识

**学习资料:**

* [《数据库系统概念》](https://book.douban.com/subject/1929984/)部分章节阅读和自学,或者 [CMU 15-445](https://15445.courses.cs.cmu.edu/fall2018/schedule.html) 对应部分内容
* 第 3 章:SQL
* 第 11 章:索引与散列
* 第 12 章:查询处理
* 第 13 章:查询优化
* 第 14 章:事务
* 第 15 章:并发控制
* 第 18 章:并行数据库
* 第 19 章:分布式数据库

**课程作业:**

* select t1.a, count(*), avg(t1.b) from t1 left outer join t2 on t1.a=t2.a group by t1.a,请给出所有可能的逻辑执行计划(画出 Plan 树),并分析 t1 的数据分布对各种逻辑执行计划执行性能的影响。画 Plan 树时可以利用 [Graphviz 作图](http://www.webgraphviz.com),例如对于 select * from t where a > 1,一个可能的执行计划可以如下图所示:

![Execution-example](../media/execution-example.jpg)

### Section 4 SQL 优化器和执行引擎基本原理

**学习资料:**

* [CMU 15-721](https://15721.courses.cs.cmu.edu/spring2018/) 数据库课程,自学 + 在线视频教学
* Optimizer Implementation (Part I)
* Optimizer Implementation (Part II)
* Cost Models
* Execution & Scheduling
* Vectorized Execution (Part I)
* Vectorized Execution (Part II)
* Parallel Join Algorithms (Hashing)
* Parallel Join Algorithms (Sorting)

**课程作业:**

* 用 Go 语言,实现一个 Join 算法,从两个 CSV 文件中读取数据,在一个或多个等值条件上进行连接,并对最终结果求和。请参考 [README](https://github.com/pingcap/talent-plan/tree/master/tidb/join) ,使用提供的框架完成作业,并跑通测试程序。提交的作业要求代码整洁规范,附有文档,并提供对程序的性能瓶颈分析及优化思路。

### Section 5 阅读 TiDB 源码

**学习资料:**

* [TiDB 源码阅读 24 章经](https://pingcap.com/blog-cn/#TiDB-%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB)

**课程作业:**

* 给 TiDB Repo 提 PR,例如修复 [for new contributors issues](https://github.com/pingcap/tidb/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3A%22for+new+contributors%22+)

## 考核要点

完成各项作业,代码通过邮件提交到 ts-team@pingcap.com,要求使用 Golang 1.12,需要有代码、测试、注释、文档。

我们会根据以下规则进行评分,最终得到一个 0~100 分的分数

1. 代码可以跑过 PingCAP 提供的测试程序(一些题目有性能要求,希望在规定的时间内跑完)50%
2. 单元测试覆盖率 30%
3. [代码风格](https://github.com/pingcap/community/blob/master/CONTRIBUTING.md#code-style) 10%
4. 文档情况 10%
75 changes: 75 additions & 0 deletions talent-plan-1.0/1.0-lp-tikv.md
@@ -0,0 +1,75 @@
# 路径 2:TiKV 方向

## 课程目标
* 掌握 Rust 语言
* 掌握分布式一致性算法 Raft
* 掌握分布式存储基本原理

## 课程内容

### Setion 1 熟悉 Rust 语言基础知识

**学习资料:**

* [Practical Networked Applications in Rust](https://github.com/pingcap/talent-plan/tree/master/rust)
* 阅读《[Rust 编程之道](https://book.douban.com/subject/30418895/)》或者《[深入浅出 Rust](https://book.douban.com/subject/30312231/)》或者 [Rust 官方教程](https://doc.rust-lang.org/book/) 三选一

**课程作业:**

* 完成 [Practical Networked Applications in Rust](https://github.com/pingcap/talent-plan/tree/master/rust) 中 Project 1、2(给该课程提出改进意见并帮助改进,根据意见及改进情况会有额外加分哦~

### Setion 1 熟悉 Rust 语言基础知识

**学习资料:**

* [Practical Networked Applications in Rust](https://github.com/pingcap/talent-plan/tree/master/rust)
* 阅读《[Rust 编程之道](https://book.douban.com/subject/30418895/)》或者《[深入浅出 Rust](https://book.douban.com/subject/30312231/)》或者 [Rust 官方教程](https://doc.rust-lang.org/book/) 三选一

**课程作业:**

* 完成 [Practical Networked Applications in Rust](https://github.com/pingcap/talent-plan/tree/master/rust) 中 Project 3、4(给该课程提出改进意见并帮助改进,根据意见及改进情况会有额外加分哦~

### Setion 3 分布式存储基础知识

**学习资料:**

* 学习 Raft Paper 和 [6.824 Lab 2: Raft](https://pdos.csail.mit.edu/6.824/labs/lab-raft.html) 线上课程

**课程作业:**

* 使用 Rust 语言 完成 6.824 Lab 2 [raft 作业](https://github.com/pingcap/talent-plan/tree/master/dss)

### Setion 4 分布式系统基础知识

**学习资料:**

* 完成 [6.824 Lab 3: Fault-tolerant Key/Value Service](https://pdos.csail.mit.edu/6.824/labs/lab-kvraft.html) 线上课程

**课程作业:**

* 使用 Rust 语言 完成 6.824 Lab 3 [kvraft 作业](https://github.com/pingcap/talent-plan/tree/master/dss)

### Setion 5 阅读 TiKV 源码

**学习资料:**

* [TiKV 源码解析](https://pingcap.com/blog-cn/#TiKV-%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90)(持续更新中)

**课程作业:**

* 给 TiKV Repo 提 PR,例如修复 [for new contributors issues](https://github.com/tikv/tikv/issues?q=is%3Aissue+is%3Aopen+label%3A%22D%3A+Easy%22+label%3A%22S%3A+HelpWanted%22)
* 给 PD Repo 提 PR,例如修复 [for new contributors issues]()

## 考核方式

根据提交到程序是否能通过测试给出 Pass or Fail

1. 代码可以跑过 PingCAP 提供的测试程序 50%

a. make check

b. make test

2. 代码风格 30%
3. 文档情况 20%

20 changes: 20 additions & 0 deletions talent-plan-1.0/README-CN.md
@@ -0,0 +1,20 @@
# Talent Plan Courses 1.0

Talent Plan 1.0 课程中共有 2 条学习路径供大家选择,分别是:

* 面向分布式关系型数据库 SQL 层的 [TiDB 方向](1.0-lp-tidb.md)
* 面向分布式 Key-value 数据库存储层的 [TiKV 方向](1.0-lp-tikv.md)

正在学习 Talent Plan 1.0 课程的小伙伴可通过上述链接查看相关路径的课程详情。

> ***特别提醒:***
>
> Talent Plan 2.0 课程已正式上线,相比 1.0 版本,新增了用 Go 语言全新设计的分布式关系型数据库 TinySQL 课程和分布式 Key-value 数据库 TinyKV 课程,并结合大家的兴趣爱好和知识背景全新规划了 5 条推荐的学习路径,分别是:
>
> * 路径 1:[实现一个 Mini 版本的分布式关系型数据库](https://university.pingcap.com/talent-plan/implement-a-mini-distributed-relational-database)
> * 路径 2:[实现一个 Mini 版本的分布式 Key-value 数据库](https://university.pingcap.com/talent-plan/implement-a-mini-distributed-key-value-database)
> * 路径 3:[参与工业级开源分布式关系型数据库 TiDB 的开发实践](https://university.pingcap.com/talent-plan/become-a-tidb-contributor)
> * 路径 4:[参与工业级开源分布式 Key-value 数据库 TiKV 的开发实践](https://university.pingcap.com/talent-plan/become-a-tikv-contributor)
> * 路径 5:[Rust 编程原理与实践](https://university.pingcap.com/talent-plan/rust-programming)
>
> 小伙伴们也可直接通过 [Talent Plan 官网](https://university.pingcap.com/talent-plan/) 开始 Talent Plan 2.0 课程的学习。

0 comments on commit bcfb2a8

Please sign in to comment.