2010-01-09 19 views
10

He tomado un curso de posgrado, que es solo un gran proyecto: escribir un DBMS.Consejos para escribir un DBMS

El objetivo no es reinventar la rueda y hacer que un DBMS empresarial rivalice con Oracle. Solo se necesita un pequeño subconjunto de comandos SQL. Tampoco es el objetivo crear un sofisticado modelo DBMS híbrido para almacenar multimedia o algo así. Tiene que ser un RDBMS tradicional.

El objetivo principal del proyecto es utilizar técnicas de programación para aprovechar las arquitecturas modernas (procesadores multinúcleo) para construir una base de datos de alto rendimiento (velocidad, carga).

Me preguntaba si había recursos en las evaluaciones de consultas, optimizadores, estructuras de datos ideales para DBMSes o básicamente cualquier cosa que pudiera ayudarme a crear un proyecto destacado. El profesor estaba hablando de términos como metaprogramación, por ejemplo.

El proyecto debe realizarse completamente en C++.


¡Gracias por las respuestas hasta ahora! No puedo optimizar un DBMS existente como MySQL, ya que el proyecto requiere que construyas tu propio DBMS desde cero. Sí, sé que esto está prácticamente reinventando la rueda en su mayor parte, pero hay margen para algunos algoritmos novedosos de evaluación y optimización de consultas. Si conoce algún buen recurso o libros sobre esta área específica, ¡por favor dígame!

+0

como si un Oracle como DBMS pudiera ser un proyecto de clase :) – Anurag

+0

Dupe of http://stackoverflow.com/questions/1852042/developing-my-own-rdbms –

+0

@Anurag Tal vez después de que el proyecto haya sido evaluado pueda construirlo para rivalizar con Oracle. Pero ese no es su motivo. –

Respuesta

2

Debido a que su profesor mencionó metaprogramming, es posible que desee ver en la siguiente:

  1. WAM - Warren Abstract Machine.Esto compila el código de prólogo en un conjunto de instrucciones que se pueden ejecutar en una máquina abstracta. La idea es similar a jvm y cli. No necesita entrar en detalles, simplemente comprender la idea de una máquina abstracta.

  2. JVM, CLI - igual que el anterior.

  3. Herramientas como lex, yacc, flex, bison. Como usted escribirá esencialmente un intérprete/compilador para comandos SQL, probablemente quiera usar algunas herramientas. Esto se puede ver como una forma de metaprogramación, ya que está utilizando un lenguaje para escribir una herramienta, por lo que está programando en el meta nivel.

  4. Una vez más, la idea de meta-programación: quizás pueda aumentar su lenguaje con construcciones que le permitirán a su compilador/intérprete de SQL optimizar automáticamente para consultas paralelas. Estos pueden implementarse como sugerencias, etc. para el compilador.

  5. Recompiladores: es posible que desee escribir un intérprete/compilador que vuelva a compilar las consultas iniciales en las que se pueden ejecutar en paralelo para su arquitectura de destino. Por ejemplo, para una arquitectura N-core, podría recompilar una consulta en N-subqueries que se ejecutan en paralelo, luego combinar los resultados.

No estoy seguro de que deba realizar una investigación exhaustiva sobre las prácticas de optimización estándar. Estos pueden ser complejos y el tema de una vida de investigación en sí mismos. Como el objetivo del ejercicio es aprovechar el procesamiento paralelo y la metaprogramación, ese debe ser el foco de su investigación.

+1

Hola, gracias por la información. Estaba buscando algo como esto, ahora puedo proceder de estos avisos. :) – user245120

+0

de nada :) –

1

Excepto por cuestiones de propiedad, ¿qué hay de la optimización de MySQL de esa manera? Sin embargo, esta no es una tarea trivial. La optimización de consultas que aprovecha el procesamiento paralelo podría ser el trabajo de un término completo.

Es mejor pararse sobre los hombros de gigantes para alcanzar hacia arriba que estar de pie junto a ellos.

+0

fue ese Newton? – Anurag

+1

+1 - http://www.mysql.com/ No hay punto para reinventar la rueda. Si el objetivo es "optimizar", entonces es mejor tener algo que funcione, y luego refactorizar áreas específicas. Probablemente también pueda desenterrar una o más pruebas de unidad (que no estén familiarizadas con el código de MySQL) que le ayudarán a validar a medida que avanza. –

+0

@Anurag: en realidad, no tengo idea. Interesante: Google para la frase muestra esta página ya! – wallyk

4

Primero necesita aprender sobre cálculo relacional y hacer un compilador para tratar de hacerlo desde sql, afortunadamente sql es un lenguaje fácil y esto no está nada mal.

Luego familiarícese con bx-trees para sus índices. Luego crea un espacio de compromiso y reversión, y eso es todo lo que hay. No es una ciencia de cohetes, en comparación con otros proyectos que podría emprender, pero definitivamente es algo que es mejor comenzar de inmediato si quiere un buen resultado para el final del semestre/año.

editar: Ah, y en cuanto a la arquitectura moderna, los árboles no suelen beneficiarse mucho con el multihilo. Tampoco las lee el disco. Por otro lado, es crucial para un alto rendimiento utilizar toda su memoria utilizando llamadas a nivel del sistema operativo, no solo la memoria normalmente direccionable en un proceso.

3

Como desee aprovechar las arquitecturas de CPU modernas, puede valer la pena mirar el proyecto MonetDB. El proyecto ha producido mucha investigación sobre la optimización de bases de datos para la arquitectura de CPU moderna, el uso de almacenes de columnas y el almacenamiento de páginas comprimidas en memoria, solo descomprimiéndolas en la memoria caché de la CPU para obtener velocidades significativas para bases de datos muy grandes.

Este enfoque (almacenamiento orientado a columna + compresión) y un motor de consulta más tradicional, tal vez basado en el motor SQLite, debería ser una buena base para un proyecto.

+0

Estaba buscando este tipo de respuestas, gracias por el aviso en monetDB :) – user245120

Cuestiones relacionadas