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

想慢慢做个 mini 数据库,选 C++还是 GO?很纠结,希望老哥们给点意见

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

    个人情况

    本科四年基本一直用 C++,毕业接近 6 年,主要用 java,对关系型数据库比较感兴趣,用过 mysql 和 sqlserver,捯饬过慢查优化,索引设计和索引原理等,也看过《数据库设计概论》的一部分,但没有深入到源码层级。

    短板分析

    • 虽然出身科班,但基础较差(甚是惭愧)。看 java 一些涉及到大量位运算的源码就比较吃力。想做一个 mini DB 的契机很大程度上也是源于希望加深对操作系统各方面的认识,练好内功,适应以后技术的飞速变化。
    • 自认语言 stack 还是显得狭窄,想多熟练一门语言。
    • 虽有 C++经验,但水平一般且丢了好几年。个人认为 GO 的学习曲线应该比 C++稍微平些。

    纠结点

    • C++虽成本高,但更接近 OS 底层,而且熟练之后猜测对学 JVM 也有所裨益?毕竟现在几个主流的 VM 依然是 c/c++ 实现的。
    • 从功利一点的角度看,似乎 GO 更值得学。

    从个人而言,最重要考虑的点依然是加深对操作系统 /网络等基本功的认识。希望有类似经验的老哥们能给点参考意见。目前想法是先做一个比较简陋基本版的,再慢慢添砖加瓦。如果能推荐一些学习 c++或者 go 的 resource 就更好了。

    49 回复  |  直到 2019-10-01 23:21:56 +08:00
        1
    owenliang   50 天前
    厉害。。。
        2
    janxin   50 天前   ♥ 1
    最好的语言 Rust 不了解一下?
        3
    yamasa   50 天前
    @janxin 对 rust 不甚了解,也是跟底层打交道多吗?
        4
    90928yao   50 天前
    go 吧 好多 go 的数据库
        5
    liprais   50 天前
    用 java
    至少你想抄的时候有的抄
        6
    xdeng   50 天前
    c/c++可以做成库给其他语言用,go 目前不行吧。
        7
    ipwx   50 天前
    “想做一个 mini DB 的契机很大程度上也是源于希望加深对操作系统各方面的认识”

    我觉得不现实,mini 数据库用不着操作系统级别的优化,用了就不可能是 mini 数据库了。
        8
    zjsxwc   50 天前
    @xdeng

    cgo 早期就是 从 go 编译成 c 语言,然后再用 c 的工具链编译成二进制,虽然现在是直接编译成二进制,
    但毫无疑问 go 可以编译成 so 库提供给 c++/c 用
        9
    inhzus   50 天前 via Android
    这个得看 scale 有多大吧…不过咱也不是很懂
        10
    wuzhizhan   50 天前
    java 就可以了,你的 mimi 数据库。。。
        11
    yamasa   50 天前
    @ipwx 并不是上来就要优化的意思。诸如操作 page,考虑和设计记录在 hardDisk 内的结构和存储方式(顺序 /链表),还有索引的实现和硬盘存储等,对于我也是比较有意义的。
        12
    salamanderMH   50 天前
    C++需要多练习
        13
    taogen   50 天前 via Android
    老哥,书名写错了。。(尴尬

    你都说了是加深对操作系统 /网络等基本功,又不是为了加强某个语言的熟练度,所以选择你最熟悉的语言即可。
        14
    catror   50 天前
    这里追求接近底层没啥意义,在你的代码里,和系统底层直接交互也就只有系统调用。这一点上,Go 有对系统调用进行封装,开发体验上和 C++不会有啥区别。
        15
    guonaihong   50 天前
    @zjsxwc 兄弟正解,我现在就用 go 代码生成 c 的 ABI 然后给 c++调用。这样开发效率可以。
        16
    misaka19000   50 天前
    建议 go,C++我怀疑你有可能写到一半放弃。。。
        17
    yamasa   50 天前 via Android
    @taogen
    @catror
    感谢二位的回复,有大体的想法了。
        18
    yamasa   50 天前 via Android
    @misaka19000 确实。。完全能想象(手动捂脸)
        19
    scnace   50 天前 via Android
    写新的数据库轮子 不用 Rust ?
        20
    xdeng   50 天前
    @zjsxwc win 的 dll 还没支持吧
        21
    such   50 天前
    肯定是 c++,从 gc 上考虑,golang 天生劣势,既然有能力去用 c++写,为什么要用 go 呢
        22
    XIVN1987   50 天前
    c+others,最底层核心用 C 写,方便完全掌控内存布局,,中高层用其他语言写,降低开发难度
        23
    sadfQED2   50 天前
    我来泼个冷水,数据库应该是一个项目里面最不能出错的东西,也是性能要求就苛刻的。自己造的话涉及 io,网络,命令解析,索引等等,自己研究的话为什么不去读读 mysql 的源码?你自己也说没读过源码,你造这个不就是想学点东西吗,读源码明显能学到更多,实在是想自己造,Mysql 都是模块化的,你可以考虑造一个 Mysql 的存储引擎啊,以后出去面试也可以吹逼也好说一些啊
        24
    xieren58   50 天前
    都 9102 了, 不用 rust ?
        25
    VDimos   50 天前 via Android
    那当然是 rust 咯,c 艹需要一定功力,golang 性能肯定不如 rust,毕竟还有 runtime。
        26
    Kilerd   50 天前
    自带 GC 的语言你应该不会去考虑如何节省资源,什么时候该释放资源,所以 rust 更加适合这个场景。

    BTW 广告来了 resource.rs
        27
    iPhoneXI   50 天前
    Mini 数据库是 kv 的还是 RDBMS
    感觉后者挺复杂的
    redis 这样的数据库源码还是很清晰的
        28
    lolizeppelin   50 天前
    不是应该参考 PG 然后用 C 么!
        29
    ClarkAbe   50 天前 via Android
    @90928yao #4 大多都是 json
        30
    yamasa   50 天前 via Android
    @iPhoneXI 想做 rdbms
        31
    ClericPy   50 天前
    推荐 rust 的说的都挺在理的, 多考虑一下吧

    golang 槽点你先看一下能不能忍, 再决定要不要学, 不过 C 系基础学 go 入门也快

    话说没调研过已有轮子? 看看源码提升比自己瞎摸索要大
        32
    yamasa   50 天前 via Android
    @ClericPy 是这样的 个人这几年的经验 感觉不带着问题看源码效率很低 往往是自己尝试实现的时候碰壁了 带着问题去看 就有豁然开朗的感觉。我也不是打算闷着头闭门造成,遇到问题肯定会去参考源码实现和一些论文的,感谢大佬。
        33
    yamasa   50 天前 via Android
    谢谢几位推荐 rust 的老哥,会认真考虑的。
        34
    Mirana   50 天前
    纠结的时间都可以写完了
        35
    hourann   50 天前 via iPhone
    搜一下 pingcap talentplan
        36
    keith1126   50 天前
    @Mirana #34

    这个真写不完
        37
    zhuyichen1017   50 天前
    开个 repo 我来 watch 一下
        38
    activemq   50 天前
    用 Java 搞一个吧,完全跨平台,一个 jar 包走天下
        39
    Rorshach   50 天前
    35 楼正解
    其实我感觉不用从头写一个的。。上个公开课多好,比如 35 楼,或者 CS186
        40
    miaoever   50 天前
    推荐 CMU Introduction of database system, 课程课件和视频 https://15445.courses.cs.cmu.edu/fall2019/
    配套的作业 database in C++: https://github.com/cmu-db/bustub
        41
    jhdxr   49 天前
    写这种底层的要么 c/c++,现在多了 rust 这么一个选项 ref: https://msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programming/

    至于 go 或 java,写着自己当玩具也许还行吧
        42
    arloor   49 天前 via iPad
    肯定不能有 gc 的语言
        43
    ruyuejun   49 天前
    想使用 C++的话,可以考虑 rust
    想追求快速出结构,可以考虑 go
        44
    FrankHB   49 天前
    实现一个数据库需要的技能和你粗体强调的东西没多少交集。
    先老实重新分析清楚需求。
        45
    yulon   49 天前
    需要纠结就用 Go,C++ 水平高的写起来完全比 Go 爽,根本不用考虑选谁,Go 现在也能写动态库,共享方面不用担心。
        46
    reus   49 天前 via Android
    go 有 tidb 和 cockroachdb。
    rust 还没有。
        47
    find   49 天前 via iPhone
    我用过 java 写过数据库作业 在我 github 里面
        48
    yuikns   49 天前
    @reus tikv 是 rust 写的。然后在此基础上用 go 写的事务
        49
    yuikns   49 天前
    其实就是看目标。如果就是实现个 parser,学习一下 transaction 之类的。选择自己最熟悉的语言。用 python php 都行。

    如果是 rdbms 楼上居然没有人建议看看 sqlite ?单论代码我觉得那个写得挺好看的。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4047 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 37ms · UTC 03:55 · PVG 11:55 · LAX 19:55 · JFK 22:55
    ♥ Do have faith in what you're doing.