Советы по написанию СУБД - PullRequest
10 голосов
/ 09 января 2010

Я прошел курс повышения квалификации, который является всего лишь одним крупным проектом - написание СУБД.

Цель не состоит в том, чтобы изобретать велосипед и превратить корпоративную СУБД в соперника с Oracle.Нужно поддерживать только небольшое подмножество команд SQL.Также не ставится задача создать какую-то причудливую гибридную модель СУБД для хранения мультимедиа или чего-то еще.Это должна быть традиционная СУБД.

Основная цель проекта - использовать методы программирования для использования преимуществ современных архитектур (многоядерных процессоров) для создания высокопроизводительной базы данных (скорость, нагрузка).

Мне просто интересно, есть ли какие-нибудь ресурсы по оценке запросов, оптимизаторам, структурам данных, идеально подходящим для СУБД, или вообще что-нибудь, что может помочь мне создать выдающийся проект.Профессор разбрасывал такие термины, как, например, метапрограммирование.

Проект должен быть полностью выполнен на C ++.


Спасибо за ответы!Я не могу оптимизировать существующую СУБД, такую ​​как MySQL, поскольку проект требует от вас создания собственной СУБД с нуля.Да, я знаю, что это в значительной степени переизобретает колесо по большей части, но есть возможности для некоторых новых алгоритмов оценки и оптимизации запросов.Если вы знаете какие-либо хорошие ресурсы или книги, касающиеся этой конкретной области, то, пожалуйста, скажите мне!

Ответы [ 4 ]

4 голосов
/ 09 января 2010

Сначала вам нужно узнать о реляционном исчислении и составить компилятор, чтобы справиться с его созданием из sql, к счастью, sql - простой язык, и это не плохо.индексов.Затем создайте место для фиксации и отката, и это все, что нужно сделать.Это не ракетостроение, по сравнению с другими проектами, которые вы могли бы предпринять, но это определенно то, что вам лучше начать прямо сейчас, если вы хотите получить хороший результат к концу семестра / года.В современной архитектуре многопоточность обычно не приносит пользы деревьям.Ни один из дисков не читает.С другой стороны, для высокой производительности крайне важно использовать всю вашу память с помощью вызовов уровня ОС, а не только память, обычно адресуемую в процессе.

3 голосов
/ 09 января 2010

Если вы хотите воспользоваться преимуществами современных архитектур процессоров, возможно, стоит взглянуть на проект MonetDB.В рамках проекта было проведено множество исследований по оптимизации баз данных для современной архитектуры ЦП, использованию хранилищ столбцов и хранению сжатых страниц в памяти - только распаковка их в кэш ЦП для получения значительных скоростей для очень больших баз данных.

Этот подход(хранилище, ориентированное на столбцы + сжатие) и более традиционный механизм запросов, возможно, основанный на механизме SQLite, должны стать хорошей основой для проекта.

2 голосов
/ 09 января 2010

Поскольку ваш профессор упомянул метапрограммирование, вы можете посмотреть на следующее:

  1. WAM - абстрактная машина Уоррена. Это компилирует код пролога в набор инструкций, которые могут быть выполнены на абстрактной машине. Идея похожа на jvm и cli. Вам не нужно вдаваться в подробности, просто поймите идею абстрактной машины.

  2. JVM, CLI - то же, что и выше.

  3. Такие инструменты, как lex, yacc, flex, bison. Поскольку вы будете писать по существу интерпретатор / компилятор для команд SQL, вы, вероятно, захотите использовать некоторые инструменты. Это можно рассматривать как форму метапрограммирования, поскольку вы используете язык для написания инструмента - поэтому вы программируете на мета-уровне.

  4. Опять же, идея метапрограммирования - возможно, вы можете дополнить свой язык конструкциями, которые позволят вашему компилятору / интерпретатору SQL автоматически оптимизировать параллельные запросы. Они могут быть реализованы в виде подсказок и т. Д. Для компилятора.

  5. Перекомпиляторы - вы можете написать интерпретатор / компилятор, который перекомпилирует исходные запросы в запросы, которые могут выполняться параллельно для вашей целевой архитектуры. Например, для архитектуры N-core он может перекомпилировать запрос в N-подзапросы, которые выполняются параллельно, а затем объединить результаты.

Я не уверен, что вам следует углубиться в изучение стандартных методов оптимизации. Они могут быть сложными и предметом исследования в течение всей жизни сами по себе. Поскольку целью упражнения является использование параллельной обработки и метапрограммирования, это должно быть в центре вашего исследования.

1 голос
/ 09 января 2010

За исключением проприетарных проблем, как насчет оптимизации MySQL такими способами? Это не тривиальная задача, хотя. Оптимизация запросов, использующая преимущества параллельной обработки, может быть работой всего термина.

Лучше встать на плечи гигантов, чтобы подняться вверх, чем стоять рядом с ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...