V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OliverDD
V2EX  ›  程序员

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

  •  
  •   OliverDD ·
    oliverdding · 206 天前 · 6000 次点击
    这是一个创建于 206 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这两年用到比较多数据库,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 条附言  ·  206 天前

    总结下大家的建议:

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

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

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

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

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

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

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

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

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

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

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

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

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

    你就是叶公好龙。你发言自由,我们就没有发言自由?
    az467
        38
    az467  
       205 天前
    CS122
    用的 java
    主要是 query engine 查询优化相关

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

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

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

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

    好吧,我觉得 OP 可以不用去管别人怎么实现,自己多看点理论,然后用自己喜欢的语言去做个实现就很好。
    dog82
        41
    dog82  
       205 天前
    SQL 引擎部分得具备编译原理的知识才行
    qW7bo2FbzbC0
        42
    qW7bo2FbzbC0  
       205 天前
    try this

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

    Writing a sqlite clone from scratch in C
    harlanXue
        43
    harlanXue  
       205 天前
    我司招数据库开发,C++ ,北京
    mmdsun
        44
    mmdsun  
       205 天前 via iPhone
    纯 Java 的数据库,学习够用了
    https://github.com/lealone/Lealone
    v2qwsdcv
        45
    v2qwsdcv  
       205 天前
    #0
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2562 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:18 · PVG 23:18 · LAX 07:18 · JFK 10:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.