做一个关系型数据库系统的简单 demo 大概有多大的工作量

2020-10-30 08:44:18 +08:00
 zxCoder

做一个关系型数据库系统的简单 demo 大概有多大的工作量,我觉得做一个可以更加深入了解整个数据库的存储和查询流程。

就是从 sql 的解析到构造中间的查询结构到和实际磁盘文件进行交互

这个工作量作为大学课程设计可以吗,可以很简化,比如只支持最简单的 select 和 insert,只支持单表,暂时不考虑事务或者其他的东西

1815 次点击
所在节点    问与答
17 条回复
HenryWang0723
2020-10-30 08:47:04 +08:00
没看懂...做个 jdbc ?
opengps
2020-10-30 08:51:42 +08:00
工作中最常用的其实是查询,变着法的查询,单表查,二次查询,组合查询,统计查询等等

如果楼主要联系的是最原始的增删改查,那么仅仅是调用 4 次 orm 提供的方法,可以十分钟内完成🤪
zxCoder
2020-10-30 08:58:14 +08:00
@HenryWang0723
@opengps

不是 是数据库系统,不是数据库的应用程序
TomVista
2020-10-30 09:04:54 +08:00
第一种
git clone mongo

第二种

没个几个月我是写不出来,光 b+树我就得看一个月:dog
mazyi
2020-10-30 09:05:07 +08:00
如果不对性能等做要求,并不难。

如果自由设计又达不到深入了解的目的,不自由设计学习成熟数据库又无法更好解释这样设计的背后的原因,因为其实数据库关注的内容非常多,解析 SQL 和文件存储都是为高效使用服务。

这个课程设计作为哪门课的也很难确定,数据库的相关课程一般没有编码的内容,都是数据库相关的内容,编码的课程一般没有数据库的内容,除了基本操作,操作系统轮不到这个做课程设计,一门单纯的现代数据库设计原理估计还有可能,但是就需要更加深入,那么这个课程设计的出题难度也不小。
zoowii
2020-10-30 09:20:31 +08:00
https://github.com/zoowii/levelsql

可以参考这个玩具,不做很多细节优化工作量不是太大
chihiro2014
2020-10-30 09:28:33 +08:00
去看看 cmu 15-445 ?课题就是这个,挺复杂的,国内要开这玩意,太不现实
kifile
2020-10-30 09:41:03 +08:00
不考虑 ACID 的情况下,应该主要工作量就是 AST 语法树的解析吧
optional
2020-10-30 09:41:56 +08:00
calcite 用现成的脚手架,忽略性能,感觉不难,
lllllliu
2020-10-30 10:03:09 +08:00
去看看 sqlite
sphawkcn
2020-10-30 10:17:14 +08:00
@zxCoder #3 我猜测楼主的意思想问:手撸一个最简版的关系型数据库,注意,是做数据库本身,而不是应用程序
PonysDad
2020-10-30 10:27:31 +08:00
最难的那一块是 SqlParser 以及优化.不过有现成的.其他的直接怼在内存中不难.
sockpuppet9527
2020-10-30 10:31:00 +08:00
@lllllliu #10
sqlite....差不多自己写了套块管理,benchmark 宣称提升了 35%。
感觉就是触发了 ext4 的 big_alloc 特性,减少内核切换。
要是读起来还是比较蛋疼的。。
sockpuppet9527
2020-10-30 10:37:59 +08:00
给 lz 一点建议,不关注存储引擎本身的话,实现功能。那么就分为几块
1. sql 解析器:最简单正则模式解析
2. 存储结构:最简单不按块来存,按行来存取(就不需要纠结扩展问题)

你看最简单的 demo 是不是很快就能搞定。

要是真想学点东西,建议从存储开始看起,了解快存储 /字符存储(目前应该两个够用),了解文件 /块 /字符的相应接口。个人认为不了解存储的话,数据库有些代码会看的比较迷茫。
再去学啥是数据库,包括里面的具体细节,解析器,存储引擎,存储过程,crud 是怎么实现的,事务又是怎么实现的,断电保护,故障恢复....
一套组合拳下来,时间也比较长
zxCoder
2020-10-30 11:02:55 +08:00
@sockpuppet9527 其实就是在学你说的这些具体细节(解析器,存储引擎,存储过程,crud )的过程中感觉太抽象了,概念比较多,平时学东西总是习惯从代码入手,看懂代码
lllllliu
2020-10-30 18:02:43 +08:00
emmm,你可以想象你在做一本字典呢,先不管 SQL 的解析。先把查询做出来。
zxCoder
2020-10-30 19:57:21 +08:00
@lllllliu 对整体架构没啥概念,单独写个 sql 解析这种编译原理也学过,单独写个什么 B+树还是哈希表也不难,但是要怎么说整合成一个 dbms 就有点头大了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719997

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX