Подсказки для записи DBMS

Я взял курс уровня выпускника, который является всего одним большим проектом - для записи DBMS.

Цель не состоит в том, чтобы изобрести велосипед и сделать предприятие DBMS для конкуренции с Oracle. Только небольшое подмножество команд SQL должно поддерживаться. И при этом цель не состоит в том, чтобы создать некоторую необычную гибридную модель DBMS для хранения мультимедиа или чего-то. Это должен быть традиционный RDBMS.

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

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

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


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

10
задан Bill the Lizard 19 September 2012 в 12:40
поделиться

4 ответа

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

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

  2. JVM, CLI - так же, как указано выше.

  3. Инструменты, такие как Lex, YACC, Flex, Bison. Поскольку вы будете писать по существу интерпретатор / компилятор для SQL-команд, вы, вероятно, хотите использовать некоторые инструменты. Это можно рассматривать как форму метапрограммирования, поскольку вы используете язык для записи инструмента - поэтому вы программируете на мета-уровне.

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

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

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

2
ответ дан 4 December 2019 в 01:31
поделиться
[

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

] [

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

].
1
ответ дан 4 December 2019 в 01:31
поделиться

Сначала вам нужно изучить о реляционном исчислении и сделать компилятор для его создания из sql, к счастью, sql - простой язык, и это неплохо.

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

edit: О, и что касается современной архитектуры, деревья обычно не получают особой выгоды от многопоточности. Диск не читает. С другой стороны, для высокой производительности крайне важно использовать всю вашу память с помощью вызовов уровня ОС, а не только память, обычно адресуемую в процессе.

4
ответ дан 4 December 2019 в 01:31
поделиться

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

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

3
ответ дан 4 December 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: