对数据库感兴趣,但完全接受不了 cpp

323 天前
OliverDD  OliverDD

这两年用到比较多数据库,ClickHouse 、PostgreSQL 等,慢慢发现自己对数据库非常感兴趣,很想深入去了解各个数据库模块和设计。

看 CMU 的 15445/645 课程,结果整个项目基于 BusTub (一个 C++写的教学数据库),对于 CPP 我是真的提不起一丁点兴趣,看它各种操蛋语法很是痛苦,什么 move constructors 、左右值、&&,我感觉很难快速掌握这个“工具”去学习我想学的,反而会在工具上花费大量时间...

想问下各位大佬们有什么建议吗?

贴一下在看的资料:

6292 次点击
所在节点   程序员  程序员
45 条回复
YYSn5k19667xsfSA
YYSn5k19667xsfSA
323 天前
去找个 PingCAP 的实习,就能写 Golang/Rust 了
xtreme1
xtreme1
323 天前
令你痛苦的这些东西, 等价的玩意 rust 里也是一个不少...
tianxiaoxin
tianxiaoxin
323 天前
可以跟着这个教程学一下,c 比 cpp 简单多了: https://github.com/akerdi/buildyourowndatabase
ipwx
ipwx
323 天前
叶公好龙
jlkm2010
jlkm2010
323 天前
misaka9982
misaka9982
323 天前
MIT 6.5830
tool2dx
tool2dx
323 天前
cpp 是用大量额外的开发时间,换去对细节的掌控。

如果项目周期不紧张,可以多练练,后期积累多了,就很牛逼了。
qingshanyuluo
qingshanyuluo
323 天前
用的时候问 gpt 不就行了,我现在就一点不怕奇奇怪怪的语法
OliverDD
OliverDD
323 天前
@tianxiaoxin 谢谢回复。我想了解的是主要是 query engine 和 storage manager 两部份,附带一些通用的工具,看了下应该不适用
OliverDD
OliverDD
323 天前
@ipwx 呃,我认识你吗?为啥在我这刷存在感
OliverDD
OliverDD
323 天前
@misaka9982 非常感谢,我看了下是用 go 做项目的。我了解下。
nebkad
nebkad
323 天前
Rust 神教教徒来传教了,不喜请忽略。

我跟你一样,对数据库的查询引擎和存储结合的部分很感兴趣,也觉得 CPP 的心智负担真的太大了,没办法让我在快速试验想法的同时,能够积累一些代码用于下一次的迭代。

如果只是要快速迭代,那可能用脚本语言或者别的灵活性很高的语言是可以的,但问题是这些语言虽然表现力强但是性能真的很成问题,很难用于积累。

所以 Rust 真的很适合,它的类型系统能够帮助你以很正交的方式来描述抽象设计,零成本抽象的设计原则提供了良好的运行时性能。

作为一个曾经的 CPP 程序员,我认为 Rust 真的不需要知道什么奇技淫巧或者 corner case 就能用得很好;当然这对于很多人来说,可能 Rust 的门槛真的很高,因为他们不一定需要这么强力的工具。但以你的目标来看( DBMS 核心组件),Rust 应该是恰当的。
wateryessence
wateryessence
323 天前
https://github.com/cmu-db/15445-bootcamp

不如趁还在学校的时候先学 c++,早晚也要学的
redbule
redbule
323 天前
https://cs186berkeley.net/
你需要这个,这是 java 实现的版本。不喜欢 cpp 就先绕过,先直奔目标学会基础
o562dsRcFqYl375i
o562dsRcFqYl375i
323 天前
@ipwx 一针见血
ccsexyz
ccsexyz
323 天前
你以为你喜欢,实际上你不喜欢。所以你需要做的是接受这一点。
lesismal
323 天前
@ipwx #4 太贴切了
fuyufjh
323 天前
看看大数据,Spark 、Hive 、Trino 这些,语言以 JVM 系的为主,查询路径上的知识差不多太多,存储、事务之类的被大幅简化了
BeiChuanAlex
323 天前
搞数据库 c++ 是一个永远也绕不过去的坎吧。。。。。。
Kumo31
323 天前
数据库本身就是一个性能敏感的东西,这里的体现不仅是在整体架构,算法设计上,还包括具体的代码实现细节,比如函数的传参方式,内存的申请时机... 也就是令你深恶痛绝的这些东西,虽然 Rust 能屏蔽了一些繁琐的语法细节,但你依然需要理解这些概念才能写出高性能的代码。

我觉得主要还是看你目的,如果只是想学习数据库,那也有不少 Go 甚至 Java 实现的课程,这些足够你理解数据库的核心概念、设计和机制。但如果想真正地从事数据库 or 其他底层基础设施工作,那 C++ 是绝对绕不过去的门槛。

不过不少分布式数据库的 SQL 层也是用 Go 写的,因为在这里网络通信和查询处理的代价更高,语言本身执行的性能相对没那么重要了,但依然充斥着各种 magic 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1032919

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX