本科四年基本一直用 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 ![]() 最好的语言 Rust 不了解一下? |
4 90928yao 2019-09-30 16:36:29 +08:00 go 吧 好多 go 的数据库 |
![]() | 5 F281M6Dh8DXpD1g2 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 ?单论代码我觉得那个写得挺好看的。 |