这两年用到比较多数据库,ClickHouse 、PostgreSQL 等,慢慢发现自己对数据库非常感兴趣,很想深入去了解各个数据库模块和设计。
看 CMU 的 15445/645 课程,结果整个项目基于 BusTub (一个 C++写的教学数据库),对于 CPP 我是真的提不起一丁点兴趣,看它各种操蛋语法很是痛苦,什么 move constructors 、左右值、&&,我感觉很难快速掌握这个“工具”去学习我想学的,反而会在工具上花费大量时间...
想问下各位大佬们有什么建议吗?
贴一下在看的资料:
总结下大家的建议:
有几个热心v友贴了其它有意思的数据库课程视频,感兴趣可以扒一下帖子。
至于本人,我想了解数据库的初衷是兴趣,只是为了好玩,应该不会考虑深入到改变职业发展。所以我会尝试按着方案二去看看能否管中窥豹。
1
YYSn5k19667xsfSA 206 天前
去找个 PingCAP 的实习,就能写 Golang/Rust 了
|
2
xtreme1 206 天前 3
令你痛苦的这些东西, 等价的玩意 rust 里也是一个不少...
|
3
tianxiaoxin 206 天前
可以跟着这个教程学一下,c 比 cpp 简单多了: https://github.com/akerdi/buildyourowndatabase
|
4
ipwx 206 天前 26
叶公好龙
|
6
misaka9982 206 天前 1
MIT 6.5830
|
7
tool2dx 206 天前 via Android
cpp 是用大量额外的开发时间,换去对细节的掌控。
如果项目周期不紧张,可以多练练,后期积累多了,就很牛逼了。 |
8
qingshanyuluo 206 天前
用的时候问 gpt 不就行了,我现在就一点不怕奇奇怪怪的语法
|
9
OliverDD OP @tianxiaoxin 谢谢回复。我想了解的是主要是 query engine 和 storage manager 两部份,附带一些通用的工具,看了下应该不适用
|
11
OliverDD OP @misaka9982 非常感谢,我看了下是用 go 做项目的。我了解下。
|
12
nebkad 206 天前 3
Rust 神教教徒来传教了,不喜请忽略。
我跟你一样,对数据库的查询引擎和存储结合的部分很感兴趣,也觉得 CPP 的心智负担真的太大了,没办法让我在快速试验想法的同时,能够积累一些代码用于下一次的迭代。 如果只是要快速迭代,那可能用脚本语言或者别的灵活性很高的语言是可以的,但问题是这些语言虽然表现力强但是性能真的很成问题,很难用于积累。 所以 Rust 真的很适合,它的类型系统能够帮助你以很正交的方式来描述抽象设计,零成本抽象的设计原则提供了良好的运行时性能。 作为一个曾经的 CPP 程序员,我认为 Rust 真的不需要知道什么奇技淫巧或者 corner case 就能用得很好;当然这对于很多人来说,可能 Rust 的门槛真的很高,因为他们不一定需要这么强力的工具。但以你的目标来看( DBMS 核心组件),Rust 应该是恰当的。 |
13
wateryessence 206 天前 via iPhone
|
14
redbule 206 天前
https://cs186berkeley.net/
你需要这个,这是 java 实现的版本。不喜欢 cpp 就先绕过,先直奔目标学会基础 |
15
o562dsRcFqYl375i 206 天前
@ipwx 一针见血
|
16
ccsexyz 206 天前 1
你以为你喜欢,实际上你不喜欢。所以你需要做的是接受这一点。
|
18
fuyufjh 206 天前 1
看看大数据,Spark 、Hive 、Trino 这些,语言以 JVM 系的为主,查询路径上的知识差不多太多,存储、事务之类的被大幅简化了
|
19
BeiChuanAlex 206 天前
搞数据库 c++ 是一个永远也绕不过去的坎吧。。。。。。
|
20
Kumo31 206 天前 1
数据库本身就是一个性能敏感的东西,这里的体现不仅是在整体架构,算法设计上,还包括具体的代码实现细节,比如函数的传参方式,内存的申请时机... 也就是令你深恶痛绝的这些东西,虽然 Rust 能屏蔽了一些繁琐的语法细节,但你依然需要理解这些概念才能写出高性能的代码。
我觉得主要还是看你目的,如果只是想学习数据库,那也有不少 Go 甚至 Java 实现的课程,这些足够你理解数据库的核心概念、设计和机制。但如果想真正地从事数据库 or 其他底层基础设施工作,那 C++ 是绝对绕不过去的门槛。 不过不少分布式数据库的 SQL 层也是用 Go 写的,因为在这里网络通信和查询处理的代价更高,语言本身执行的性能相对没那么重要了,但依然充斥着各种 magic 。 |
21
ydpro 206 天前 1
推荐 2 个课程:
CS186 ,他的实验是基于 Java 的。 清华大学的数据库课程 https://www.bilibili.com/video/BV15u4y1Q71R/?spm_id_from=333.999.0.0&vd_source=b578f404bddc480d71de0ce5866009a9 楼主有空可以看下,我也比较纠结选择哪个课程 |
22
longbowape 206 天前 1
传统数据库实现可以看《 Database System Implementation 》,《 Designing Data-Intensive Applications 》和实现关系不大,主要讲应用层怎么做技术选型的。
|
23
mm520 206 天前
可以看下我写的教程,用 Go 和 Rust https://w02agegxg3.feishu.cn/docx/Ktp3dBGl9oHdbOxbjUWcGdSnn3g
|
24
littlewing 206 天前 1
你是对存储引擎还是 SQL 感兴趣,存储引擎的话,move constructors 、左右值、&& 这些用得比较少
|
25
thedinosaurmail 206 天前
那就学编译原理,学完编译原理再看 cpp
|
27
OliverDD OP @wateryessence 毕业一年了…学这么心智开销大的东西,我还不感兴趣,这不是什么好主意
|
28
kneo 206 天前 via Android 3
这 OP 有点巨婴。人家指出你的问题还需要先和你很熟?
|
29
totoro52 206 天前
那天学了点 rust ,说实在 学不下去了,规矩太多了
|
30
OliverDD OP @kneo 本来不想回的。我对某个技术感兴趣,想深入点研究以满足好奇心,碰壁,遂来本站提问,请问这个行为戳到他哪点了?就算我叶公好龙,他是谁啊,凭啥在互联网上指指点点?真有意思,我从未一天换个说“我要成为 xxx 专家!”,何来叶公好龙一说?
|
32
simen513 206 天前
PostgreSQL 的代码主要是 C 语言的,注释也全,代码风格不错,网上资料也多,推荐你学习。
|
33
codegenerator 206 天前
查询引擎什么语言 java go 都可以,存储引擎可以考虑 rust
我以前用 c++自从用了 rust 彻底不想写 cpp 了 |
34
ihciah 206 天前 1
cpp 通常有两种:简单版和魔法版,简单版性能或者泛化能力差一些。很多人以能够写出魔法并且难以被经验较少的理解沾沾自喜。
这种问题在 rust 里不存在,麻瓜也能写出足够高效的代码,且没有一堆 hardcode 补丁般难以理解的规则。 这才是一个语言应该有的样子:具有充分的表达能力的同时保持简单(如果一个 cpp 程序员认为 rust 更难,那么很有可能他并没有学会正确的 cpp 使用姿势)。 我也很讨厌写 cpp ,讨厌 cpp 真的不代表你会讨厌曾经强依赖它的技术。 |
35
teiboku1 206 天前
看看 lucene 呗 纯 java
|
36
agagega 206 天前 via iPhone
cpp 的心智负担是重,但你说的右值引用和移动构造这些东西并不是 cpp 的心智负担造成的,甚至不是因为 cpp 没有 gc 造成的,所有支持值语义的语言都必须实现类似的概念。
|
38
az467 206 天前
CS122
用的 java 主要是 query engine 查询优化相关 或者你看看 TiKV/TiDB 呢 |
39
levelworm 206 天前 via Android
我感觉楼主也不算是叶公好龙,毕竟很多时候只想了解背后的东西,不打算做专业的实现,那的确没必要去按照专业的法子来。就好比说我想了解一下编译器的实现,我没必要啃龙书虎书,对不对? 我把 Crafting Interpreters 这本书看完,代码跟着抄完,我的目的也实现了。反正我又不是想要成为专家,只是想了解。
楼主可以找找看有没有数据库方面类似编译器这块 Crafting Interpreters 的书,就是一边介绍原理一边干。挑一本不用 C++的就行。 或者读读第一版的 redis 源代码也行,据说质量不错。C 相对来说语法简单一些。 |
40
xuanbg 206 天前
要我说 OP 喜欢研究数据库技术,但讨厌 C 艹,这有问题吗???一点问题都没有,任何人都可以讨厌 C 艹。楼上明里暗里嘲讽 OP 的也是够了。。。
还有 2 楼说 rust 有一样的问题,这个确实是客观事实。但这个不影响我就是喜欢 rust 而不喜欢 C 艹呀。 好吧,我觉得 OP 可以不用去管别人怎么实现,自己多看点理论,然后用自己喜欢的语言去做个实现就很好。 |
41
dog82 206 天前
SQL 引擎部分得具备编译原理的知识才行
|
42
qW7bo2FbzbC0 206 天前
|
43
harlanXue 206 天前
我司招数据库开发,C++ ,北京
|
44
mmdsun 205 天前 via iPhone
纯 Java 的数据库,学习够用了
https://github.com/lealone/Lealone |
45
v2qwsdcv 205 天前
#0
|