V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zxCoder
V2EX  ›  问与答

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

  •  
  •   zxCoder · 2020-10-30 08:44:18 +08:00 · 1952 次点击
    这是一个创建于 1477 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    17 条回复    2020-10-30 19:57:21 +08:00
    HenryWang0723
        1
    HenryWang0723  
       2020-10-30 08:47:04 +08:00
    没看懂...做个 jdbc ?
    opengps
        2
    opengps  
       2020-10-30 08:51:42 +08:00 via Android
    工作中最常用的其实是查询,变着法的查询,单表查,二次查询,组合查询,统计查询等等

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

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

    第二种

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

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

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

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

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

    要是真想学点东西,建议从存储开始看起,了解快存储 /字符存储(目前应该两个够用),了解文件 /块 /字符的相应接口。个人认为不了解存储的话,数据库有些代码会看的比较迷茫。
    再去学啥是数据库,包括里面的具体细节,解析器,存储引擎,存储过程,crud 是怎么实现的,事务又是怎么实现的,断电保护,故障恢复....
    一套组合拳下来,时间也比较长
    zxCoder
        15
    zxCoder  
    OP
       2020-10-30 11:02:55 +08:00
    @sockpuppet9527 其实就是在学你说的这些具体细节(解析器,存储引擎,存储过程,crud )的过程中感觉太抽象了,概念比较多,平时学东西总是习惯从代码入手,看懂代码
    lllllliu
        16
    lllllliu  
       2020-10-30 18:02:43 +08:00
    emmm,你可以想象你在做一本字典呢,先不管 SQL 的解析。先把查询做出来。
    zxCoder
        17
    zxCoder  
    OP
       2020-10-30 19:57:21 +08:00
    @lllllliu 对整体架构没啥概念,单独写个 sql 解析这种编译原理也学过,单独写个什么 B+树还是哈希表也不难,但是要怎么说整合成一个 dbms 就有点头大了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5523 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:00 · PVG 17:00 · LAX 01:00 · JFK 04:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.