编写DBMS的技巧

时间:2010-01-09 01:18:02

标签: c++ database

我参加了一个研究生课程,这只是一个大项目 - 编写DBMS。

目标不是重新发明轮子并使企业DBMS与Oracle竞争。只需要支持一小部分SQL命令。目标也不是为了存储多媒体或其他东西而创建一些花哨的混合模型DBMS。它必须是传统的RDBMS。

该项目的主要目标是使用编程技术利用现代架构(多核处理器)来构建高性能数据库(速度,负载)。

我只是想知道是否有任何关于查询评估,优化器,DBMS数据结构的数据结构的资源,或者基本上可以帮助我创建一个出色项目的任何资源。教授就像元编程这样的术语。例如。

项目必须完全用C ++完成。


感谢您的回复!我无法优化现有的DBMS,例如MySQL,因为项目要求您从头开始构建自己的DBMS。是的,我知道这在很大程度上重新发明了轮子,但是有一些新颖的查询评估和优化算法的空间。如果您知道任何有关此特定领域的资源或书籍,请告诉我!

4 个答案:

答案 0 :(得分:4)

首先,您需要了解关系演算并使编译器处理从sql编写它,谢天谢地,sql是一种简单的语言,这也不错。

然后熟悉索引的bx-trees。然后创建一个提交和回滚空间,这就是它的全部内容。与你可能进行的其他项目相比,这不是火箭科学,但如果你想在学期末/年结束时取得好成绩,那么你最好马上开始。

编辑:哦,至于现代建筑,树木通常不会从多线程中获益。磁盘读取也没有。另一方面,使用OS级别调用来使用整个内存对于高性能至关重要,而不仅仅是通常在进程中可寻址的内存。

答案 1 :(得分:3)

当您希望利用现代CPU架构时,可能值得查看MonetDB项目。该项目围绕现代CPU架构优化数据库进行了大量研究,使用列存储并将压缩页存储在内存中 - 仅在CPU缓存中对其进行解压缩,以便为非常大的数据库获得显着的速度。

这种方法(面向列的存储+压缩)和更传统的查询引擎(可能基于SQLite引擎)应该是项目的良好基础。

答案 2 :(得分:2)

由于您的教授提到了元编程,您可能需要查看以下内容:

  1. WAM - Warren抽象机。这将prolog代码编译成一组可以在抽象机器上执行的指令。这个想法类似于jvm和cli。你不需要详细讨论这个问题,只需要理解抽象机器的想法。

  2. JVM,CLI - 与上述相同。

  3. lex,yacc,flex,bison等工具。由于您将基本上编写SQL命令的解释器/编译器,因此您可能希望使用某些工具。这可以被视为元编程的一种形式,因为您使用的是一种语言来编写工具 - 所以您在元级别进行编程。

  4. 同样,元编程的想法 - 也许你可以使用允许你的SQL编译器/解释器自动优化并行查询的结构来扩充你的语言。这些可以作为提示等实现给编译器。

  5. 重编译器 - 您可能希望编写一个解释器/编译器,将初始查询重新编译为可以为目标体系结构并行运行的查询。例如,对于N核架构,它可能会将查询重新编译为并行执行的N子查询,然后合并结果。

  6. 我不确定您是否应该对标准优化实践进行大量研究。这些可能是复杂的,也是一生研究的主题。由于练习的目的是利用并行处理和元编程,这应该是你研究的重点。

答案 3 :(得分:1)

除了专有问题,如何以这种方式优化MySQL?尽管如此,这不是一项微不足道的任务。利用并行处理的查询优化可能是整个术语的工作。

站在巨人的肩膀上向上伸展比站在他们旁边更好。