• 请不要在回答技术问题时复制粘贴 AI 生成的内容
sskycn
V2EX  ›  程序员

我准备写一个强类型关系型数据库,是应该用 go 还是 rust?

  •  2
     
  •   sskycn ·
    sskycn · Aug 12 · 5495 views
    This topic created in 90 days ago, the information mentioned may be changed or developed.

    详细说明在这里:

    https://github.com/sskycn/xdb

    go 语言我用了多年,很熟悉,rust 没用过,但在我的感觉里,这个项目应该用 rust.

    大家帮我分析分析,应该用什么好。

    为什么想写一个强类型数据库,是因为优化自己的 dsl ,优化到了一定程度后,感觉很接近数据库的实现了。

    dsl 现在是用 go 实现的。

    Supplement 1  ·  Aug 12

    我原来的dsl,需要生成sql来操作数据库,NetbaDB的目标大概就是省掉代码生成,直接支持强类型操作。

    // @Entity(table="users")
    type User struct {
    	// @PrimaryKey
    	Id uint64
    
    	// @Column("display_name")
    	DisplayName string
    
    	// @Omit
    	Password string
    
    	// @Ignore
    	SessionToken string
    }
    
    // @Entity(table="teams")
    type Team struct {
    	// @PrimaryKey
    	ID uint64
    }
    
    // @Entity(table="members")
    type Member struct {
    	// @Ref(Team.ID)
    	TeamID *uint64
    }
    
    Supplement 2  ·  Aug 12

    已经确定用rust了,项目已经开始了,有兴趣的可以一起玩。

    https://github.com/sskycn/netbadb

    netbadb/
    ├── Cargo.toml
    ├── rust-toolchain.toml
    ├── crates/
    │   ├── netbadb-types/       shared IDs, physical and semantic types
    │   ├── netbadb-schema/      language-independent Canonical Schema IR
    │   ├── netbadb-parser/      small typed-query AST and parser
    │   ├── netbadb-hir/         name resolution and type checking
    │   ├── netbadb-rel/         typed logical relational IR
    │   ├── netbadb-compiler/    AST → HIR → logical plan
    │   ├── netbadb-planner/     logical plan → physical plan
    │   ├── netbadb-storage/     transactions, WAL, pages, buffer pool, and heap
    │   ├── netbadb-executor/    synchronous physical-plan execution
    │   └── netbadb-core/        native embedded database API
    ├── sdk/
    │   ├── rust/                Rust application-facing re-export surface
    │   └── go/                  Go SDK / protocol direction and contract notes
    ├── docs/
    ├── examples/
    └── tests/
    
    45 replies  •  2026-08-13 21:16:21 +08:00
    fiveStarLaoliang
    1
    选 go ,AI 时代,最好选一门程序员友好型。写代码不用你写了,审代码还得你自己申,选一门对自己友好的语言,别折腾自己。
    bunai
    bunai
    Aug 12❤️1
    2
    推荐你用 rust
    要是我就选择 go ,rust 说实话是真看不懂
    laizenan
    laizenan
    Aug 12❤️1
    3
    talk is cheap ,让 AI 写 2 个 demo 对比 benchmark 一下呢?
    zsj1029
    zsj1029
    Aug 12❤️1
    4
    数据库这种高并发低延迟的明显是 rust 更合适,含 gc 的都要排除
    redbule
    redbule
    Aug 12❤️5
    6
    C# 其实最好,项目初期有 gc 可以快速迭代,中后期又可以用各种特性优化性能。

    性能上限无限接近无 gc 的语言。
    kurthumburgmtz97
    7
    换个名吧,谷歌搜索 xdb 一大堆同名的项目,不利于推广
    yingha
    yingha
    Aug 12❤️1
    8
    执行引擎用 go ,存储引擎 rust 。好奇存储引擎你打算怎么设计? LSM 吗?
    sskycn
    sskycn
    OP
    Aug 12
    9
    @kurthumburgmtz97 好的,马上改名。
    sskycn
    sskycn
    OP
    Aug 12
    10
    XDB 改为 NetbaDB 了,gpt 帮忙改的。
    noogler67
    noogler67
    Aug 12❤️1
    11
    有性能要求的肯定是 rust ,不然后期优化 gc 延迟,得多麻烦。
    bunai
    bunai
    Aug 12
    12
    有别人已经弄了

    https://github.com/t8y2/dbx
    antipro
    antipro
    Aug 12 via Android
    13
    @bunai 这是客户端
    icecreamxuegao
    icecreamxuegao
    Aug 12 via Android
    14
    @sskycn 网吧 DB ?
    fgwmlhdkkkw
    fgwmlhdkkkw
    Aug 12 via Android
    15
    go 没有装饰器,,,我建议用 rust 。
    vultr
    vultr
    Aug 12
    16
    NetbaDB -> net bad db

    @sskycn 你把 gpt 搞得这么有口味了?
    artiga033
    artiga033
    Aug 12 via Android❤️1
    17
    没用过 rust 那我不建议一上来就写数据库这种,rust 性能高的前提是你有正确的心智模型,否则起反效果。go 则是随便来个阿猫阿狗写出来的性能都不至于烂到家。

    而且你做这种框架大概率要写宏,rust 的宏哪怕在你完全掌握语言本身之后,写起来都是挺困难的。
    cabing
    cabing
    Aug 12❤️1
    18
    自己玩。就用 go 呗。
    loading
    loading
    Aug 12❤️1
    19
    练手 Go ,生产 Rust

    Go 有 gc ,数据库怎么能让你周期性地卡一下。
    snxq1995
    snxq1995
    Aug 12
    20
    不考虑其他语言吗,我最近在了解 zig ,感觉还不错。rust 入门失败 N 次了。go 不适合写数据库,原因同意上面的老哥,有 gc 的语言都不合适。
    ninjaJ
    ninjaJ
    Aug 12❤️1
    21
    真正的关键点在于,rust 的语言特性把很多 bug 杀死在了编程之前,用 AI 写 rust 能让你的程序健壮很多。即使你不去看代码,编译器和自动化测试已经能找出很多 bug 了。
    cndns
    cndns
    Aug 12
    22
    V2DB
    qxmqh
    qxmqh
    Aug 12
    23
    不如起名 NBDB 。牛逼 DB
    YanSeven
    YanSeven
    Aug 12
    24
    有请 TiDB 的大佬分享经验。
    ytFG
    ytFG
    Aug 12
    25
    rustDB 或者 goDB
    sqlman
    sqlman
    Aug 12
    26
    用 python (狗头)
    shylockhg
    shylockhg
    Aug 12
    27
    好奇为啥准备做这玩意
    zengxs
    zengxs
    Aug 12
    28
    除了 rust/go 还有个老登语言可以选择:c++
    sskycn
    sskycn
    OP
    Aug 12
    29
    已经开干了,最终决定用 rust 。
    vultr
    vultr
    Aug 12
    30
    @sskycn 终于知道你为什么要自己买 pro 了,其实用公司的 pro 我也不会说你的。
    bootvue
    bootvue
    Aug 12
    31
    都是渣渣 用 c++吧
    ktyang
    ktyang
    Aug 12
    32
    爷青回 感觉好久没看到这种帖子了
    yfixx
    yfixx
    Aug 12 via Android
    33
    有个 pgrust 了,你去看看
    WangTaiyang
    34
    可以看一下,已经可以用了
    https://github.com/guangdawang/wgcDB
    abbycin
    abbycin
    Aug 12 via Android
    35
    我写了两个 kv 都是用的 rust
    pannic
    pannic
    Aug 12
    36
    人写还不是人写
    Oysmart
    Oysmart
    Aug 12
    37
    @bunai 这个 NB 了。
    zouzanyan
    zouzanyan
    Aug 13
    38
    写个玩具项目,你用 python 都行
    sskycn
    sskycn
    OP
    Aug 13
    39
    @zouzanyan 您可以点进去看看我是不是写着玩的。
    airqj
    airqj
    Aug 13
    40
    都是 AI 来写,反正你又不看源码。go 还是 rust 有区别吗
    sskycn
    sskycn
    OP
    Aug 13
    41
    有区别,感觉用 ai 写 rust 比写 go 更爽,不知道是不是错觉。
    vultr
    vultr
    Aug 13
    42
    你把开源的工具做得比我定制的还要好,对我好像有点不公平哦。
    sskycn
    sskycn
    OP
    Aug 13 via Android
    43
    @vultr 老大,你同意了我才开始的。
    sskycn
    sskycn
    OP
    Aug 13
    44
    已经实现:SQL 解析 → 名称解析/类型检查 → 逻辑计划 → 物理计划 → 执行 → 持久化
    vultr
    vultr
    Aug 13
    45
    @sskycn 你不会计划未来把客户的业务都换到这个数据库吧?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4570 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 101ms · UTC 01:32 · PVG 09:32 · LAX 17:32 · JFK 20:32
    ♥ Do have faith in what you're doing.