对数据库感兴趣,但完全接受不了 cpp - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
OliverDD
V2EX    程序员

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

  •  
  •   OliverDD
    oliverdding 2024-04-16 13:58:05 +08:00 7090 次点击
    这是一个创建于 611 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    贴一下在看的资料:

    • 15445/645:主要看这个课程,但是项目因为 CPP 卡住
    • Architecture of a Database System:当作大纲来看,很多细节内容完全不了解
    • Database system concepts:本科数据库课程的教材,来拿当字典翻概念
    • Designing Data-Intensive Applications:导师强力推荐的书,在一点点看
    第 1 条附言    2024-04-16 17:49:39 +08:00

    总结下大家的建议:

    • 如果想真正做数据库方面工作,c++绕不过去,建议掌握
    • 如果只是对数据库工作原理、运行方式感兴趣,建议看看jvm上的大数据套件/go或rust写的数据库

    有几个热心v友贴了其它有意思的数据库课程视频,感兴趣可以扒一下帖子。

    至于本人,我想了解数据库的初衷是兴趣,只是为了好玩,应该不会考虑深入到改变职业发展。所以我会尝试按着方案二去看看能否管中窥豹。

    45 条回复    2024-04-17 17:56:53 +08:00
    YYSn5k19667xsfSA
        1
    YYSn5k19667xsfSA  
       2024-04-16 14:15:21 +08:00
    去找个 PingCAP 的实习,就能写 Golang/Rust 了
    xtreme1
        2
    xtreme1  
       2024-04-16 14:17:08 +08:00   3
    令你痛苦的这些东西, 等价的玩意 rust 里也是一个不少...
    tianxiaoxin
        3
    tianxiaoxin  
       2024-04-16 14:19:17 +08:00
    可以跟着这个教程学一下,c 比 cpp 简单多了: https://github.com/akerdi/buildyourowndatabase
    ipwx
        4
    ipwx  
       2024-04-16 14:21:08 +08:00   26
    叶公好龙
    jlkm2010
        5
    jlkm2010  
       2024-04-16 14:22:43 +08:00
    misaka9982
        6
    misaka9982  
       2024-04-16 14:24:17 +08:00   1
    MIT 6.5830
    tool2dx
        7
    tool2dx  
       2024-04-16 14:30:20 +08:00 via Android
    cpp 是用大量额外的开发时间,换去对细节的掌控。

    如果项目周期不紧张,可以多练练,后期积累多了,就很牛逼了。
    qingshanyuluo
        8
    qingshanyuluo  
       2024-04-16 14:32:22 +08:00
    用的时候问 gpt 不就行了,我现在就一点不怕奇奇怪怪的语法
    OliverDD
        9
    OliverDD  
    OP
       2024-04-16 14:36:02 +08:00 via iPhone
    @tianxiaoxin 谢谢回复。我想了解的是主要是 query engine 和 storage manager 两部份,附带一些通用的工具,看了下应该不适用
    OliverDD
        10
    OliverDD  
    OP
       2024-04-16 14:36:32 +08:00 via iPhone
    @ipwx 呃,我认识你吗?为啥在我这刷存在感
    OliverDD
        11
    OliverDD  
    OP
       2024-04-16 14:38:45 +08:00 via iPhone
    @misaka9982 非常感谢,我看了下是用 go 做项目的。我了解下。
    nebkad
        12
    nebkad  
       2024-04-16 14:51:46 +08:00   3
    Rust 神教教徒来传教了,不喜请忽略。

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

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

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

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

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

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

    不过不少分布式数据库的 SQL 层也是用 Go 写的,因为在这里网络通信和查询处理的代价更高,语言本身执行的性能相对没那么重要了,但依然充斥着各种 magic 。
    ydpro
        21
    ydpro  
       2024-04-16 15:44:54 +08:00   1
    推荐 2 个课程:
    CS186 ,他的实验是基于 Java 的。
    清华大学的数据库课程 https://www.bilibili.com/video/BV15u4y1Q71R/?spm_id_from=333.999.0.0&vd_source=b578f404bddc480d71de0ce5866009a9

    楼主有空可以看下,我也比较纠结选择哪个课程
    longbowape
        22
    longbowape  
       2024-04-16 15:54:48 +08:00   1
    传统数据库实现可以看《 Database System Implementation 》,《 Designing Data-Intensive Applications 》和实现关系不大,主要讲应用层怎么做技术选型的。
    mm520
        23
    mm520  
       2024-04-16 16:10:58 +08:00
    可以看下我写的教程,用 Go 和 Rust https://w02agegxg3.feishu.cn/docx/Ktp3dBGl9oHdbOxbjUWcGdSnn3g
    littlewing
        24
    littlewing  
       2024-04-16 16:15:31 +08:00   1
    你是对存储引擎还是 SQL 感兴趣,存储引擎的话,move constructors 、左右值、&& 这些用得比较少
    thedinosaurmail
        25
    thedinosaurmail  
       2024-04-16 17:35:26 +08:00
    那就学编译原理,学完编译原理再看 cpp
    OliverDD
        26
    OliverDD &bsp;
    OP
       2024-04-16 17:35:33 +08:00 via iPhone
    @ccsexyz 嗯,知道了,去玩吧
    OliverDD
        27
    OliverDD  
    OP
       2024-04-16 17:37:44 +08:00 via iPhone
    @wateryessence 毕业一年了…学这么心智开销大的东西,我还不感兴趣,这不是什么好主意
    kneo
        28
    kneo  
       2024-04-16 20:33:07 +08:00 via Android   3
    这 OP 有点巨婴。人家指出你的问题还需要先和你很熟?
    MIUIOS
        29
    MIUIOS  
       2024-04-16 20:49:22 +08:00
    那天学了点 rust ,说实在 学不下去了,规矩太多了
    OliverDD
        30
    OliverDD  
    OP
       2024-04-16 21:02:37 +08:00 via iPhone
    @kneo 本来不想回的。我对某个技术感兴趣,想深入点研究以满足好奇心,碰壁,遂来本站提问,请问这个行为戳到他哪点了?就算我叶公好龙,他是谁啊,凭啥在互联网上指指点点?真有意思,我从未一天换个说“我要成为 xxx 专家!”,何来叶公好龙一说?
    GrayXu
        31
    GrayXu  
       2024-04-16 23:18:38 +08:00   1
    @Kumo31 #20 +1 ,感觉 performance 和低心智负担就是个 trade off
    simen513
        32
    simen513  
       2024-04-16 23:26:19 +08:00
    PostgreSQL 的代码主要是 C 语言的,注释也全,代码风格不错,网上资料也多,推荐你学习。
    codegenerator
        33
    codegenerator  
       2024-04-16 23:52:05 +08:00
    查询引擎什么语言 java go 都可以,存储引擎可以考虑 rust
    我以前用 c++自从用了 rust 彻底不想写 cpp 了
    ihciah
        34
    ihciah  
       2024-04-17 00:11:08 +08:00   1
    cpp 通常有两种:简单版和魔法版,简单版性能或者泛化能力差一些。很多人以能够写出魔法并且难以被经验较少的理解沾沾自喜。
    这种问题在 rust 里不存在,麻瓜也能写出足够高效的代码,且没有一堆 hardcode 补丁般难以理解的规则。
    这才是一个语言应该有的样子:具有充分的表达能力的同时保持简单(如果一个 cpp 程序员认为 rust 更难,那么很有可能他并没有学会正确的 cpp 使用姿势)。
    我也很讨厌写 cpp ,讨厌 cpp 真的不代表你会讨厌曾经强依赖它的技术。
    teiboku1
        35
    teiboku1  
       2024-04-17 00:38:12 +08:00
    看看 lucene 呗 纯 java
    agagega
        36
    agagega  
       2024-04-17 00:43:47 +08:00 via iPhone
    cpp 的心智负担是重,但你说的右值引用和移动构造这些东西并不是 cpp 的心智负担造成的,甚至不是因为 cpp 没有 gc 造成的,所有支持值语义的语言都必须实现类似的概念。
    ilcn
        37
    ilcn  
       2024-04-17 00:59:29 +08:00   1
    @OliverDD

    你就是叶公好龙。你发言自由,我们就没有发言自由?
    az467
        38
    az467  
       2024-04-17 01:00:32 +08:00
    CS122
    用的 java
    主要是 query engine 查询优化相关

    或者你看看 TiKV/TiDB 呢
    levelworm
        39
    levelworm  
       2024-04-17 01:22:24 +08:00 via Android
    我感觉楼主也不算是叶公好龙,毕竟很多时候只想了解背后的东西,不打算做专业的实现,那的确没必要去按照专业的法子来。就好比说我想了解一下编译器的实现,我没必要啃龙书虎书,对不对? 我把 Crafting Interpreters 这本书看完,代码跟着抄完,我的目的也实现了。反正我又不是想要成为专家,只是想了解。

    楼主可以找找看有没有数据库方面类似编译器这块 Crafting Interpreters 的书,就是一边介绍原理一边干。挑一本不用 C++的就行。

    或者读读第一版的 redis 源代码也行,据说质量不错。C 相对来说语法简单一些。
    xuanbg
        40
    xuanbg  
       2024-04-17 08:47:42 +08:00
    要我说 OP 喜欢研究数据库技术,但讨厌 C 艹,这有问题吗???一点问题都没有,任何人都可以讨厌 C 艹。楼上明里暗里嘲讽 OP 的也是够了。。。

    还有 2 楼说 rust 有一样的问题,这个确实是客观事实。但这个不影响我就是喜欢 rust 而不喜欢 C 艹呀。

    好吧,我觉得 OP 可以不用去管别人怎么实现,自己多看点理论,然后用自己喜欢的语言去做个实现就很好。
    dog82
        41
    dog82  
       2024-04-17 08:58:17 +08:00
    SQL 引擎部分得具备编译原理的知识才行
    qW7bo2FbzbC0
        42
    qW7bo2FbzbC0  
       2024-04-17 09:50:29 +08:00
    try this

    https://cstack.github.io/db_tutorial/

    Writing a sqlite clone from scratch in C
    harlanXue
        43
    harlanXue  
       2024-04-17 10:22:24 +08:00
    我司招数据库开发,C++ ,北京
    mmdsun
        44
    mmdsun  
       2024-04-17 12:42:34 +08:00 via iPhone
    纯 Java 的数据库,学习够用了
    https://github.com/lealone/Lealone
    v2qwsdcv
        45
    v2qwsdcv  
       2024-04-17 17:56:53 +08:00
    #0
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5227 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 09:05 PVG 17:05 LAX 01:05 JFK 04:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86