2010-01-09 40 views
10

我参加了研究生课程,这只是一个大项目 - 编写一个数据库管理系统。编写数据库管理系统的技巧

目标不是重新发明轮子,让企业DBMS与甲骨文竞争。只需要支持一小部分SQL命令。目标也不是创建一些奇特的混合模型DBMS来存储多媒体或其他东西。它必须是传统的RDBMS。

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

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

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


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

+0

就好像Oracle数据库管理系统可能是一个类项目:) – Anurag

+0

Dupe of http://stackoverflow.com/questions/1852042/developing-my-own-rdbms – 2010-01-09 10:40:38

+0

@Auurag也许在项目已经评估后,他可以建立它与甲骨文竞争。但那不是他的动机。那个牛顿呢是 –

回答

2

由于你的教授提到的元编程,你可能想看看下面:

  1. WAM - 沃伦抽象机。这将prolog代码编译成可以在抽象机器上执行的一组指令。这个想法与jvm和cli类似。您不需要详细介绍这一点,只需了解抽象机器的概念即可。

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

  3. 诸如lex,yacc,flex,bison等工具。由于您将基本上为SQL命令编写解释器/编译器,因此您可能需要使用一些工具。这可以被看作是元编程的一种形式,因为你正在使用一种语言来编写一个工具 - 所以你是在元级编程。

  4. 再一次,元编程的想法 - 也许你可以增加你的语言结构,这将允许你的SQL编译器/解释器自动优化并行查询。这些可以作为提示等实现给编译器。

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

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

+1

嗨,感谢您的信息。正在寻找这样的东西,现在我可以从这些头开始。 :) – user245120

+0

不客气:) –

1

除专有问题外,如何通过这种方式优化MySQL?但这不是一项简单的任务。利用并行处理的查询优化可能是整个术语的工作。

站在巨人的肩膀上,站在身旁比站在身边更好。

+0

? – Anurag

+1

+1 - http://www.mysql.com/没有重新发明轮子。如果目标是“优化”,那么最好有一些工作,然后你重构特定的领域。你可能还可以挖掘一两个单元测试(不熟悉MySQL的代码本身),这将帮助你在进行验证时进行验证。 –

+0

@Anurag:其实我不知道。有趣的是:这句话的谷歌搜索已经显示这个页面! – wallyk

4

首先,您需要了解关系微积分并编译器来处理从sql中处理它,谢天谢地,sql是一种简单的语言,这并不坏。

然后熟悉你的索引bx-trees。然后创建一个提交和回滚空间,这几乎就是它的一切。与其他可能实施的项目相比,这不是火箭科学,但如果你希望在本学期/学年结束时获得好成绩,那么最好马上着手。

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

3

由于您希望利用现代CPU架构,因此可能需要查看MonetDB项目。该项目围绕现代CPU架构优化数据库进行了大量研究,使用列存储和在内存中存储压缩页面 - 仅在CPU缓存中解压缩它们,以便为超大型数据库提供显着的速度。

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

+0

正在寻找这样的答复,感谢monetDB上的领导:) – user245120