关键词:想要走存储/数据库方向的话,具体路线是啥?重点需要掌握精通哪些知识?
回答
那我简单说一下走存储/数据库这块的学习路线吧。
目前做存储比较热门的是分布式存储方向,有NoSQL的也有关系型数据库的,比如腾讯就有TDSQL,PingCAP 也有TIDB、也有分布式KV存储TIKV。
提到分布式系统,非常经典学习资料肯定首推MIT 6.824(即 MIT 分布式系统课程)
基础的数据结构以及操作系统和计算机网络肯定都是必备的,分布式系统就是通过网络构建在分散的物理节点上。
现在的分布式kv,分布式数据库基本架构是类似的:
-
基于多副本实现高可用和容灾
-
分布式查询
-
数据 Sharding 机制
-
通过2PC,Paxos/Raft 等协议实现数据一致
存储层目前 LSM Tree用的比较多,可以看看 Google Leveldb 的源码学习:https://github.com/google/leveldb
同时这也是一个非常适合用来学习C++的开源库。
存储层之上在通过分布式一致性协议在多个副本之间做到数据的一致性,以此保证存储的高可用和容错能力。
常见分布式一致性算法是raft和paxos,可以看看raft和paxos的论文。
raft 的实现,还是推荐上面说的 MIT 6.828 的课程实验,这个会有几个Lab,逐步实现一个基于raft的kv
把底层的存储层和分布式一致性协议组装起来,大概就是一个建议的分布式KV。
如果想基于这之上构建关系型数据库,那么需要引入事务层,
Google 算是这方面的鼻祖,后来很多的 NewSQL 数据库基本都是按照 Spanner/F1 论文去实现的:
这里可以学习谷歌的 Percolator 的论文。
然后再往上就是SQL层,SQL包括语法相关解析,执行器,优化器之类的。
当然在学校要学到这里来,比较难,很少有相关课程,但是网上有很多学习资源的。
我这里简单列举一下顺序哈:
-
leveldb 学习底层存储引擎,目前非常热门的 LSM Tree结构
-
分布式一致性算法:MIT6.824,也可以看下CSE 552 ,这门课是来自分布式系统巨牛 Tom Anderson
-
学习数据库原理,可以看《数据库系统概念》这本书和cmu15445 的课程,也会实现一个关系型数据库
补充一下,《数据库系统概念》这本书重点关注:
-
第 3 章:SQL
-
第 11 章:索引与散列
-
第 12 章:查询处理
-
第 13 章:查询优化
-
第 14 章:事务
-
第 15 章:并发控制
-
第 18 章:并行数据库
-
第 19 章:分布式数据库
如果自己把前面几项学完了(至少估计大半年时间)