回忆录:KDB

November 13, 2007 – 2:20 pm

接着上一篇回忆录,KDB 也是一个 MiniSQL 了,这是在大一下的时候,由于时间间隔不是很久,总结了许多问题,重写了所有的源代码,我给它取了一个名字,知道 KDB 的名字由何而来吗?看下面这个幻灯片里面的片段,应该就能猜到了吧:

因为课程的原因,这次仍然是用 C 语言写的,代码量是 5172 行,比上一次多了不少,其实整个系统都比上一次增加了不少特性,比如支持了 SQL 的多表连接操作,还有一些算术运算一类的,看下面这个我们在演示的时候曾经用过的例子:

条件和连接

这是用于演示表连接操作用的数据:

测试数据

当然,作为一个“传统项目”,我半年前的账本仍然被列入到测试数据中。不过程序分工依旧如前,所以表连接这部分是 moonykily 做的,我那边呢,一个重大改进应该是加入了页面缓存的支持吧,上一个版本竟然直接在文件里面读写进行 B+ 树操作,一点 Buffer 都没有的。Interface 几乎都没有变,只是和上一个版本比起来注释没有了 ^_^

interface 对比

另外就是这次源代码开始模块化了,按照 iterator 、B+Tree 、allocator 、pager 之类的放在了各自的目录里面。开发环境全面迁移到 Linux 下,并且用上了各种现代化武器 :D ,比如 Subversion ,这让协作起来方便多了,还有 QMake ,虽然我们这次的开发工作没有用到 Qt ,但是用 QMake 来自动生成 Makefile 却是异常方便,只要输入两条命令就完事了,什么都不用配置:

Makefile

文档也是用 LaTeX 来做的,这种风格,应该一眼就能看出来了:

 TeX 做的文档

本来还计划要做一个图形界面的,这是我们原本的架构:

架构

不过最后也没有做出来,好像也是没有时间了吧,记得截止的前一天晚上打包的时候要编译一个 Windows 版的可执行文件,可是我们用了 Makefile ,就干脆用 cygwin 直接编译吧(那个时候好像电脑上也没有 Visual Studio),可是又需要带一个 cygwin1.dll ,看上去非常不爽,moonykily 就在那里找如何去掉这个东西,我就很不厚道地睡觉去了。 :P

事实上这次代码写得非常不爽,虽然加入了内存页面缓存,但是仍然需要手工加锁、修改引用计数之类的,代码写起来非常冗余,每几行就要加一堆错误处理的代码,B+ 树的代码里面一个函数竟然就有三百多行:

B 树

最后连 goto 语句都用上了:

goto 

这样的代码,也是难免会出一些问题的,直到最后打包的时候,B+ 树还是有一些问题,压力测试是肯定无法通过的。 :( 但是,无论如何,付出了还是有收获的。最后,是简单的总结:

总结

  1. 6 Responses to “回忆录:KDB”

  2. 弱弱问下那个architecture图是怎么画的?

    By hsys on Nov 14, 2007

  3. to hsys:
    那个是用 Microsoft Powerpoint 2003 画的。

    By pluskid on Nov 14, 2007

  4. orz

    By shawn on Nov 15, 2007

  5. 汗……才发现那个 ppt 里面 moonykily 同学的名字好像给拼错了……-.-bb

    By pluskid on Mar 1, 2009

  6. 要是叫 kily 小朋友看见就更汗了~

    By 圆圆 on Mar 1, 2009

  7. 他大概也没发现吧,那个 ppt 是他审核过的。

    By pluskid on Mar 2, 2009

Post a Comment