做一个关系型数据库系统的简单 demo 大概有多大的工作量,我觉得做一个可以更加深入了解整个数据库的存储和查询流程。
就是从 sql 的解析到构造中间的查询结构到和实际磁盘文件进行交互
这个工作量作为大学课程设计可以吗,可以很简化,比如只支持最简单的 select 和 insert,只支持单表,暂时不考虑事务或者其他的东西
1
HenryWang0723 2020-10-30 08:47:04 +08:00
没看懂...做个 jdbc ?
|
2
opengps 2020-10-30 08:51:42 +08:00 via Android
工作中最常用的其实是查询,变着法的查询,单表查,二次查询,组合查询,统计查询等等
如果楼主要联系的是最原始的增删改查,那么仅仅是调用 4 次 orm 提供的方法,可以十分钟内完成🤪 |
3
zxCoder OP |
4
TomVista 2020-10-30 09:04:54 +08:00
第一种
git clone mongo 第二种 没个几个月我是写不出来,光 b+树我就得看一个月:dog |
5
mazyi 2020-10-30 09:05:07 +08:00 via iPhone
如果不对性能等做要求,并不难。
如果自由设计又达不到深入了解的目的,不自由设计学习成熟数据库又无法更好解释这样设计的背后的原因,因为其实数据库关注的内容非常多,解析 SQL 和文件存储都是为高效使用服务。 这个课程设计作为哪门课的也很难确定,数据库的相关课程一般没有编码的内容,都是数据库相关的内容,编码的课程一般没有数据库的内容,除了基本操作,操作系统轮不到这个做课程设计,一门单纯的现代数据库设计原理估计还有可能,但是就需要更加深入,那么这个课程设计的出题难度也不小。 |
6
zoowii 2020-10-30 09:20:31 +08:00
|
7
chihiro2014 2020-10-30 09:28:33 +08:00
去看看 cmu 15-445 ?课题就是这个,挺复杂的,国内要开这玩意,太不现实
|
8
kifile 2020-10-30 09:41:03 +08:00
不考虑 ACID 的情况下,应该主要工作量就是 AST 语法树的解析吧
|
9
optional 2020-10-30 09:41:56 +08:00 via Android
calcite 用现成的脚手架,忽略性能,感觉不难,
|
10
lllllliu 2020-10-30 10:03:09 +08:00
去看看 sqlite
|
12
PonysDad 2020-10-30 10:27:31 +08:00
最难的那一块是 SqlParser 以及优化.不过有现成的.其他的直接怼在内存中不难.
|
13
sockpuppet9527 2020-10-30 10:31:00 +08:00
@lllllliu #10
sqlite....差不多自己写了套块管理,benchmark 宣称提升了 35%。 感觉就是触发了 ext4 的 big_alloc 特性,减少内核切换。 要是读起来还是比较蛋疼的。。 |
14
sockpuppet9527 2020-10-30 10:37:59 +08:00
给 lz 一点建议,不关注存储引擎本身的话,实现功能。那么就分为几块
1. sql 解析器:最简单正则模式解析 2. 存储结构:最简单不按块来存,按行来存取(就不需要纠结扩展问题) 你看最简单的 demo 是不是很快就能搞定。 要是真想学点东西,建议从存储开始看起,了解快存储 /字符存储(目前应该两个够用),了解文件 /块 /字符的相应接口。个人认为不了解存储的话,数据库有些代码会看的比较迷茫。 再去学啥是数据库,包括里面的具体细节,解析器,存储引擎,存储过程,crud 是怎么实现的,事务又是怎么实现的,断电保护,故障恢复.... 一套组合拳下来,时间也比较长 |
15
zxCoder OP @sockpuppet9527 其实就是在学你说的这些具体细节(解析器,存储引擎,存储过程,crud )的过程中感觉太抽象了,概念比较多,平时学东西总是习惯从代码入手,看懂代码
|
16
lllllliu 2020-10-30 18:02:43 +08:00
emmm,你可以想象你在做一本字典呢,先不管 SQL 的解析。先把查询做出来。
|