本科四年基本一直用 C++,毕业接近 6 年,主要用 java,对关系型数据库比较感兴趣,用过 mysql 和 sqlserver,捯饬过慢查优化,索引设计和索引原理等,也看过《数据库设计概论》的一部分,但没有深入到源码层级。
从个人而言,最重要考虑的点依然是加深对操作系统 /网络等基本功的认识。希望有类似经验的老哥们能给点参考意见。目前想法是先做一个比较简陋基本版的,再慢慢添砖加瓦。如果能推荐一些学习 c++或者 go 的 resource 就更好了。
1
owenliang 2019-09-30 16:22:37 +08:00
厉害。。。
|
2
janxin 2019-09-30 16:30:30 +08:00 1
最好的语言 Rust 不了解一下?
|
4
90928yao 2019-09-30 16:36:29 +08:00
go 吧 好多 go 的数据库
|
5
liprais 2019-09-30 16:40:31 +08:00
用 java
至少你想抄的时候有的抄 |
6
xdeng 2019-09-30 16:40:59 +08:00
c/c++可以做成库给其他语言用,go 目前不行吧。
|
7
ipwx 2019-09-30 16:48:02 +08:00
“想做一个 mini DB 的契机很大程度上也是源于希望加深对操作系统各方面的认识”
我觉得不现实,mini 数据库用不着操作系统级别的优化,用了就不可能是 mini 数据库了。 |
8
zjsxwc 2019-09-30 16:49:28 +08:00
|
9
inhzus 2019-09-30 16:51:10 +08:00 via Android
这个得看 scale 有多大吧…不过咱也不是很懂
|
10
wuzhizhan 2019-09-30 16:51:32 +08:00
java 就可以了,你的 mimi 数据库。。。
|
11
yamasa OP @ipwx 并不是上来就要优化的意思。诸如操作 page,考虑和设计记录在 hardDisk 内的结构和存储方式(顺序 /链表),还有索引的实现和硬盘存储等,对于我也是比较有意义的。
|
12
salamanderMH 2019-09-30 17:02:54 +08:00
C++需要多练习
|
13
taogen 2019-09-30 17:19:49 +08:00 via Android
老哥,书名写错了。。(尴尬
你都说了是加深对操作系统 /网络等基本功,又不是为了加强某个语言的熟练度,所以选择你最熟悉的语言即可。 |
14
catror 2019-09-30 17:23:56 +08:00
这里追求接近底层没啥意义,在你的代码里,和系统底层直接交互也就只有系统调用。这一点上,Go 有对系统调用进行封装,开发体验上和 C++不会有啥区别。
|
15
guonaihong 2019-09-30 17:25:25 +08:00
@zjsxwc 兄弟正解,我现在就用 go 代码生成 c 的 ABI 然后给 c++调用。这样开发效率可以。
|
16
misaka19000 2019-09-30 17:28:27 +08:00
建议 go,C++我怀疑你有可能写到一半放弃。。。
|
18
yamasa OP @misaka19000 确实。。完全能想象(手动捂脸)
|
19
scnace 2019-09-30 17:48:58 +08:00 via Android
写新的数据库轮子 不用 Rust ?
|
21
such 2019-09-30 17:55:48 +08:00
肯定是 c++,从 gc 上考虑,golang 天生劣势,既然有能力去用 c++写,为什么要用 go 呢
|
22
XIVN1987 2019-09-30 18:07:08 +08:00
c+others,最底层核心用 C 写,方便完全掌控内存布局,,中高层用其他语言写,降低开发难度
|
23
sadfQED2 2019-09-30 18:15:35 +08:00
我来泼个冷水,数据库应该是一个项目里面最不能出错的东西,也是性能要求就苛刻的。自己造的话涉及 io,网络,命令解析,索引等等,自己研究的话为什么不去读读 mysql 的源码?你自己也说没读过源码,你造这个不就是想学点东西吗,读源码明显能学到更多,实在是想自己造,Mysql 都是模块化的,你可以考虑造一个 Mysql 的存储引擎啊,以后出去面试也可以吹逼也好说一些啊
|
24
xieren58 2019-09-30 18:24:37 +08:00
都 9102 了, 不用 rust ?
|
25
VDimos 2019-09-30 18:33:51 +08:00 via Android
那当然是 rust 咯,c 艹需要一定功力,golang 性能肯定不如 rust,毕竟还有 runtime。
|
26
Kilerd 2019-09-30 18:51:40 +08:00
|
27
iPhoneXI 2019-09-30 18:55:09 +08:00
Mini 数据库是 kv 的还是 RDBMS
感觉后者挺复杂的 redis 这样的数据库源码还是很清晰的 |
28
lolizeppelin 2019-09-30 19:02:17 +08:00
不是应该参考 PG 然后用 C 么!
|
31
ClericPy 2019-09-30 19:44:43 +08:00
推荐 rust 的说的都挺在理的, 多考虑一下吧
golang 槽点你先看一下能不能忍, 再决定要不要学, 不过 C 系基础学 go 入门也快 话说没调研过已有轮子? 看看源码提升比自己瞎摸索要大 |
32
yamasa OP @ClericPy 是这样的 个人这几年的经验 感觉不带着问题看源码效率很低 往往是自己尝试实现的时候碰壁了 带着问题去看 就有豁然开朗的感觉。我也不是打算闷着头闭门造成,遇到问题肯定会去参考源码实现和一些论文的,感谢大佬。
|
33
yamasa OP 谢谢几位推荐 rust 的老哥,会认真考虑的。
|
34
Mirana 2019-09-30 20:48:55 +08:00
纠结的时间都可以写完了
|
35
hourann 2019-09-30 21:22:04 +08:00 via iPhone
搜一下 pingcap talentplan
|
37
zhuyichen1017 2019-09-30 22:29:50 +08:00
开个 repo 我来 watch 一下
|
38
activemq 2019-09-30 22:47:50 +08:00
用 Java 搞一个吧,完全跨平台,一个 jar 包走天下
|
39
Rorshach 2019-09-30 23:59:00 +08:00
35 楼正解
其实我感觉不用从头写一个的。。上个公开课多好,比如 35 楼,或者 CS186 |
40
miaoever 2019-10-01 04:40:51 +08:00
推荐 CMU Introduction of database system, 课程课件和视频 https://15445.courses.cs.cmu.edu/fall2019/
配套的作业 database in C++: https://github.com/cmu-db/bustub |
41
jhdxr 2019-10-01 12:49:40 +08:00
写这种底层的要么 c/c++,现在多了 rust 这么一个选项 ref: https://msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programming/
至于 go 或 java,写着自己当玩具也许还行吧 |
42
arloor 2019-10-01 13:38:06 +08:00 via iPad
肯定不能有 gc 的语言
|
43
ruyuejun 2019-10-01 13:41:13 +08:00
想使用 C++的话,可以考虑 rust
想追求快速出结构,可以考虑 go |
44
FrankHB 2019-10-01 16:15:58 +08:00
实现一个数据库需要的技能和你粗体强调的东西没多少交集。
先老实重新分析清楚需求。 |
45
yulon 2019-10-01 17:33:18 +08:00
需要纠结就用 Go,C++ 水平高的写起来完全比 Go 爽,根本不用考虑选谁,Go 现在也能写动态库,共享方面不用担心。
|
46
reus 2019-10-01 18:33:43 +08:00 via Android
go 有 tidb 和 cockroachdb。
rust 还没有。 |
47
find 2019-10-01 20:45:46 +08:00 via iPhone
我用过 java 写过数据库作业 在我 github 里面
|
49
yuikns 2019-10-01 23:21:56 +08:00
其实就是看目标。如果就是实现个 parser,学习一下 transaction 之类的。选择自己最熟悉的语言。用 python php 都行。
如果是 rdbms 楼上居然没有人建议看看 sqlite ?单论代码我觉得那个写得挺好看的。 |