回忆录:MiniSQL

November 13, 2007 – 10:33 am

上一篇 Blog 中列举了几次 MiniSQL 开发总结的一些经验教训吧,在整理那些东西的时候也翻出许多有趣的东西来,也来回忆回忆,哈哈!MiniSQL 确实是个十足的 MiniSQL ,因为我们在着手写数据库的时候甚至都还不知道数据库该怎么用,大概了解了一下 select 之类的东西,但对 join 之类的却是完全没有概念,于是我们的数据库里面自然也不支持 join 操作了,简而言之就是一个普通的有索引的表。而且我们为表的每一个 attribute 都建立了索引。当时的分工是我做数据库内容和索引的管理,moonykily 做用户交互和 SQL 解析,我做的部分如下图所示:

Engine 架构

这是当时总结的经验教训,大概是程序哪里确实有问题吧,竟然归罪与 memcpy ,哈哈,难道是 memcpy 的参数设错了?-,-bb

经验教训

顺便说一下,上面的图和文档都是当时用 OpenOffice 做出来的,效果还不错吧?MiniSQL  是我们的 C 语言课程 Project ,自然是由 C 语言来写了,最终代码量一共是 4089 行吧,下面是源文件:

源码

若是去翻看源代码,也会有有趣的东西 :P ,例如这个 Magic Number :

Magic Number

以及这个片段:

set_last_error

那句 set_last_error 就不说了,从这里可以看出当时我们直接在源码里写了中文,而且注意看那奇怪的缩进,那是 Emacs 默认的 gnu 风格的代码缩进,当时应该刚刚开始学用 Emacs 吧。其实用中文是一个很大的失误,编码问题给我们造成了很多麻烦,后来我专门用一个脚本来转换编码(后面只要是稍微大一点的程序我都再也没有用过中文注释或者是直接嵌入中文的字符串常量了),由于没有版本控制,还做了下面这个自动下载源文件的脚本:

下载文件的脚本

Makefile 一开始也是手写,后来改用脚本自动生成,根据文件名来匹配依赖关系吧,相当简陋的一个脚本,不过那个时候应该是不知道还有 Automake 、CMake 之类的东西(moonykily 倒是直接用 VS 2005 了):

生成 Makefile 的脚本

总之当时条件似乎是十分简陋啊,估计脚本大多也是那个时候学的吧,还有以下这个生成测试数据的脚本,可以看出我曾经也是会用 Perl 的:

生成测试数据的 Perl 脚本

这个测试数据主要还是来源于我大一的时候的账本了,也要得益于我记录用的格式相当简单,一行一个记录,以“|”分割字段,所以解析起来也非常容易,恩,不过似乎 MiniSQL 之后就没有继续记账了,下面是我大一账本片段欣赏:

账本数据库

可见我还是挺节俭的,哈哈~只是有点买书癖好。也不知那是什么矿泉水,如此的贵,至于国防社团的会费,也是大一年少无知,在“百团大战”的时候被欺骗加入的了,后来几乎没有参加过什么活动,倒是去过一次毅行,社团还是要属 MSTC 好啊,不用交会费,还时常有 BG ! :D

记得当时似乎并没有要求一定要做一个 Project 出来,我们做了这个东西,虽然不很完善,但也算是花了功夫的了,单从时间上来看肯定是花得最长的,可见还是大一的时候有激情啊!现在懒多了,但是无论如何,MiniSQL 也只是尘封的美好回忆了,未来还有更多的路要走啊!

结题报告

  1. 15 Responses to “回忆录:MiniSQL”

  2. 激情燃烧的岁月…

    By galilette on Nov 13, 2007

  3. nice
    我发现你真的是前途无量啊

    By shifan on Nov 13, 2007

  4. to 石老师:我很土的。 @_@`b

    By pluskid on Nov 13, 2007

  5. A born programmer……….

    By ln on Nov 13, 2007

  6. 关于Join, 可以看看merge join(sort merge join).

    PS: 学校为啥老是MiniSQL, 难道就不能往前走一点 =.=

    By Jack on Nov 14, 2007

  7. 注释和error msg是中文阿….

    By Jack on Nov 14, 2007

  8. http://www.dis.uniroma1.it/~catarci/DBslides/Mod5L1LT/sld001.htm

    关于Join实现的解释

    By Jack on Nov 14, 2007

  9. to jack:
    恩,大一的时候,源码里用了中文,结果导致了很多问题,后来就再也不敢用了,也算是上了一课。

    By pluskid on Nov 14, 2007

  10. to jack:
    对于数据库的 Project 的话,不做 MiniSQL ,你认为做个什么好呢?还是去分析下开源的数据库的实现,做做性能测试,改进改进什么的?

    By pluskid on Nov 14, 2007

  11. 如果我是校长,我更愿意让把低年级的插入到高年级的项目中去,呵呵。

    By Jack on Nov 14, 2007

  12. 恩,从我个人的经历来看,插入到一个已经有大体框架的项目中去做比自己从头开始做对于初学者来说要更容易,如果有人带的话,还能让初学者专心关注于自己“应该关注的部分”。但是怎么说呢?到底什么是“应该关注的部分”,我觉得虽然会碰一些钉子,但是学会如何从头开始一个项目并规划管理好也是每个程序员必须要做的了吧。

    By pluskid on Nov 14, 2007

  13. 但是学校的积累很少 =.= 每届都做完miniSQL就结束了。

    如果设计好一点,也许是一个新的SQLite或者SleepyCat

    By Jack on Nov 14, 2007

  14. 恩,学校确实没有做什么积累,我觉得有些学长们还是下了苦功夫的,不过最终也仅仅是一个 MiniSQL 了。延续下去是个好主意,每次在前一届的基础上让大家做下去,最后选出做得最好的,加到上一次的基础上,作为下一次的基础。但是这样在不同的届之间延续,难度差异之类的都很难把握,而且学校那些老师估计忙得故不开管理这些事情喽~Sigh~

    By pluskid on Nov 14, 2007

  15. 难道是路遇pluskid大神么

    可惜图片都看不到了,不然可以拿来参考一下的。

    By Ink_Snow on May 5, 2010

  16. @Ink_Snow,
    恩,看来是原来的域名失效了,把图片改成相对路径终于显示出来了。

    By pluskid on May 5, 2010

Post a Comment