Какой будет хорошая база данных с открытым исходным кодом для изучения дизайна базы данных?(Проектирование СУБД, а не нормализация таблиц и т. Д.) - PullRequest
8 голосов
/ 16 февраля 2011

Как указано в вопросе, я не ищу помощи по проектированию баз данных с точки зрения создания таблиц, нормализации и т. Д.

Как проект программирования, я хочу написать свою собственную СУБД. Это больше всего для обучения, поэтому изобретать колесо - своего рода цель.

Я начал свой поиск с просмотра SQLite - я нашел мою и старую ветку SVN с 2001 по 2004 год, которая удивительно прокомментирована, но все еще много чего нужно переварить сразу. Но даже в этом случае я прохожу это в течение часа или двух, и моя голова уже на ходу с идеями.

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

Спасибо!

Ответы [ 6 ]

1 голос
/ 17 февраля 2011

Как указывалось ранее, SQLite, JavaDB и SimpleDB являются хорошими примерами. Я бы добавил Berkeley DB в список. Berkleley DB хорошо документирован, существует уже несколько лет, имеет несколько доступных API, а также несколько методов доступа, таких как HASH, QUEUE и RECNO, в дополнение к традиционному B-дереву. Berkeley DB - это библиотека базы данных ключ / значение, написанная на C. Berkeley DB XML - библиотека баз данных XML, написанная на C ++ поверх Berkeley DB. Berkeley DB Java Edition - это 100% библиотека данных ключа / значения Java. Все они доступны по лицензии, подобной лицензии GPL, а исходный код включен в дистрибутив .

API-интерфейс Berkeley DB включает API-интерфейс SQLite, в основном реализуя хранилище данных пары ключ / значение BDB под слоем запросов SQLite. Berkeley DB был также первой реализацией хранения данных под MySQL, снова приняв слой SQL-запроса и сохранив данные в простом формате данных ключ / значение данных. Это, безусловно, интересный способ взглянуть на проблему - если у вас есть гибкое, быстрое, масштабируемое, надежное хранилище данных, вы можете затем наложить поверх него любой тип API или представление / абстракцию данных. Это именно то, что делает Berkeley DB, предоставляя выбор между хранилищем данных основной пары ключ / значение или XML, SQL, коллекциями Java или POJO-подобным постоянным уровнем поверх инфраструктуры базовой пары ключ / значение.

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

Отказ от ответственности: я являюсь одним из менеджеров по продуктам в Berkeley DB, так что, очевидно, я немного предвзят. Но я также работаю над продуктами баз данных 25 лет и немного знаю о внутренностях СУБД. : -)

Удачи в ваших исследованиях.

Dave

1 голос
/ 16 февраля 2011

Существует SimpleDB Эдварда Шьоре (не связанная с SimpleDB Amazon), "Простая многопользовательская система на основе Java для обучения внутренним компонентам базы данных".Это на Java, но я думаю, что идеи будут довольно легко переводиться на C.

С http://www.cs.bc.edu/~sciore/simpledb/intro.html:

SimpleDB - это многопользовательский сервер транзакционных баз данных, написанный на Java, которыйвзаимодействует с клиентскими программами Java через JDBC.Система предназначена только для педагогического использования.Код чистый и компактный.API-интерфейсы просты.Кривая обучения относительно мала.Все это направлено на улучшение опыта внутреннего курса системы баз данных.Следовательно, система преднамеренно голая.Он реализует только небольшую часть SQL и JDBC и практически не проверяет ошибки.Хотя это отличный учебный инструмент, я не могу себе представить, чтобы кто-то захотел использовать его для чего-либо еще.

Также есть книга:

Разработка базы данныхи реализация

1 голос
/ 16 февраля 2011

Мне сказали, что исходный код PostgreSQL очень хорошо документирован и структурирован.
Но это, очевидно, не квалифицируется как «маленькая базовая СУБД».

Кроме этого, единственные "маленькие", о которых я знаю, это СУБД на основе Java:

Не уверен, поможет ли реализация на основе Java.

0 голосов
/ 16 февраля 2011

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

Но если вы не зацикливаетесь на полностью реляционных хранилищах данных, то ищите исходный код дерева B + в Google. Дерево B + является фундаментальной структурой данных, которая позволяет вам поддерживать отсортированный индекс на диске, и 15-20 лет назад было несколько пакетов исходного кода C, которые это реализовали. Это гораздо проще, потому что нет SQL, и в основном две части, одна для управления блоками на диске, а другая для управления структурой B + Tree.

Как только вы поймете это, вы можете вернуться к коду SQLite и, без сомнения, идентифицировать подобные модули среди остальной части кода.

Иногда лучший способ научиться - повторить некоторые исторические шаги.

0 голосов
/ 16 февраля 2011

Может быть SQLite - хорошее начало.Он настолько прост, насколько это возможно (без сетевого уровня, упрощенной блокировки и т. Д.), Но он понимает реальный SQL, имеет индексы и ограничения и реализован на языке C. Однако его хранение является своеобразным.

0 голосов
/ 16 февраля 2011

Вы можете взглянуть на базу данных Apache Derby.Это полноценная реализация RDBMS;Ну, это написано полностью на Java, хотя.и, безусловно, это не маленькая и простая реализация.Но это может послужить хорошим ориентиром.

...