Существуют ли какие-либо независимые механизмы реляционного хранения данных с открытым исходным кодом? - PullRequest
4 голосов
/ 02 ноября 2011

Я изучал правильную реляционную алгебру из книги Кристофера Дейта База данных в глубине: Реляционная теория для практиков .На протяжении всей книги он использует язык, который он и Хью Дарвен придумали, чтобы передать теорию - Учебное пособие D .В целом, я думаю, что Tutorial D - это очень работающий язык запросов, гораздо более гибкий, чем SQL, и поэтому я (просто для удовольствия) стремился сделать ставку на написание (плохо работающей, несомненно) маленькой СУБД, основанной на Tutorial D, а неSQL.

Понимая, что это огромная задача, даже просто сделать что-то простое, мне интересно, существуют ли доступные системы хранения, которые не представляют таблицы в смысле SQL, но представляют отношения в реляционном смыслеи не предполагайте, что какой-либо конкретный язык запросов используется для доступа к данным, а просто предоставьте низкоуровневые функции, такие как product, join, intersect, union, project и т. д. (на C-уровень, а не на уровне языка запросов).

Имею ли я смысл?:) По сути, я хотел бы взять что-то вроде этого и вставить перед ним интерфейс запроса Tutorial D (или аналогичный).

Действительно все легко сделать в памяти, но представлять структуры данных на дискев способе, который даже умеренно эффективен, довольно сложно и, вероятно, у меня над головой без каких-либо серьезных исследований.

Ответы [ 3 ]

4 голосов
/ 02 ноября 2011

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

Наиболее оптимальный план выполнения затем выполняется в базе данных;это то, что генерирует наборы результатов.

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

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

Взгляните на SQLite как компактный движок реляционных баз данных с открытым исходным кодом.

3 голосов
/ 02 ноября 2011

Dave Voorhis 'Rel уже делает то, что вы, похоже, хотите построить.

http://dbappbuilder.sourceforge.net/Rel.php

Если, конечно, ваша прямая цель - попытаться построить для себя ...

0 голосов
/ 02 ноября 2011

Обратите внимание, что интерфейс для Tutorial D не будет зависеть от языка запросов;)

Мой голос также за Rel.

Хью Дарвен поддерживает список проектов, связанныхк TTM (спецификации для языка D, реализация которого Tutorial D), я уверен, что он хотел бы услышать о ваших усилиях, если они придут к чему-либо.

...