Мне нужно узнать, как работают базы данных, чтобы использовать их более эффективно, и мой способ обучения - это делать.
Я хочу создать свою собственную систему баз данных. Я не имею в виду создание псевдо-базы данных, которая будет использовать запрос для разбора файлов; это будет просто интерфейс файловой системы с языком запросов. Я говорю о фактической структуре движка базы данных. И поскольку то, что я имею в виду, не является ни реляционным, ни ориентированным на документы (оно «ориентировано на узлы», если оно вообще существует), мне понадобится любой ресурс, чтобы быть как можно более абстрактным и высокоуровневым.
Так как же мне заняться созданием этого? Какие ресурсы / учебники / книги я могу прочитать, чтобы понять?
Язык не имеет значения ни в малейшей степени. В идеале код должен быть псевдокодом, иллюстрирующим концепцию, не привязанным к конкретному языку, но что-нибудь подойдет. Я не смог ничего найти по этому вопросу в Google (так как я настолько неграмотен по этому вопросу, может быть, я просто не вхожу в правильный поиск).
Если такие ресурсы недоступны, то, я думаю, что-то о том, как создать клиента, будет, по крайней мере, шагом в правильном направлении.
источник
I studied open-source DBs, but their codebase is too huge
: Если что-то вроде redis или flockdb слишком велико для вас, я не понимаю, как вы справитесь с написанием или собственной базой данных.Ответы:
Начало здесь. При работе со сложным приложением, таким как база данных (даже простая база данных является сложным приложением), вы должны быть знакомы с историей домена и правильной терминологией и иметь представление об архитектуре как минимум очень высокого уровня. Вы можете начать со статьи в Википедии о базе данных . Потратил несколько дней на чтение всех статей о связанных понятиях и различных типах баз данных.
Далее вы выбираете Relational или NoSQl. Если вы выбираете NoSQL, вы должны выбрать один тип NoSQL. Это чрезвычайно важно, вы не найдете никаких архитектурных документов, которые обсуждают все различные семейства баз данных. Неважно, какой вы выберете, просто выберите один и придерживайтесь его.
Да, это так (к сожалению), потому что после выбора семейства баз данных вы должны начать исследовать код из баз данных с открытым исходным кодом этого семейства. Есть несколько общих рекомендаций о том, что искать:
Несколько примеров, которые подходят:
Получите исходный код, скомпилируйте его и поиграйте с ним. Вам не нужно отправлять патчи или что-то еще, что нужно, просто изучите код и внесите небольшие изменения здесь и там, чтобы посмотреть, что произойдет. Это постепенный процесс, и чем больше вы играете с ним, тем легче будет понять, что делает код. Если первый выбранный вами проект кажется чрезвычайно сложным для понимания, просто переходите к следующему.
Другим отличным вариантом было бы сконцентрироваться на создании движка для MySQL, как @NB предлагает в предыдущем ответе .
Если вы дойдете до того момента, когда сможете сделать что-то полезное с помощью кодовой базы, присоединитесь к сообществу проекта, это самый простой способ найти более подробные ресурсы по рассматриваемым концепциям.
И, наконец, начать работать над вашей базой данных. Сначала вы можете просто написать чрезвычайно уменьшенный клон кода, который вы изучаете. Это не должно быть оригинально, довольно много отличных проектов начинались как клоны или вилки
Есть довольно много книг:
И еще несколько сотен, плюс множество научных работ, которые вы легко можете отследить через Google. Вам нужно сначала определить, что вы хотите сделать, а затем искать книгу. Взаимодействие с сообществом авторов баз данных также поможет вам сузить список книг и, возможно, получить намного лучшие предложения, чем приведенные выше.
Удачи! Я ожидаю комментарий со ссылкой на ваш репозиторий, когда вы закончите. И если вы никогда этого не сделали, обязательно оставьте комментарий, напоминающий мне, что я все еще не закончил тот компилятор, который начал писать в 2001 году.
источник
I'm expecting a comment with a link to your repository when you're done
: Вероятнее всего! Еще раз спасибо вам и всем остальным, это было действительно воодушевляющим.Вы должны просто сделать это и перестать думать слишком много. Наслаждение процессом обучения и энтузиазм - это дары.
Спрашивать других, если это хорошая идея, конечно, не очень хорошая стратегия . Если бы я выслушал всех лягушек, я бы все равно работал сегодня в Ikea, толкая тележку с парковки в депо.
Вам не нужно оправдываться, как Айенде в этом интересном посте . Вопрос был:
Если вы получаете удовольствие от процесса, не беспокойтесь о цели, вы уже выиграли.
источник
msgstr "(он" ориентирован на узлы ", если он вообще существует)". - Это может быть, почему вы не находите много!
Погрузитесь в версию 0.1 и посмотрите, где вы находитесь. Вы можете узнать больше, пытаясь создать то, что вы хотите, спрашивая, что вы «должны» делать. Дайте ему несколько дней, а затем рассмотрите, где у вас есть.
Около 18 лет назад я написал базовую систему баз данных (для интереса, иди с цифрой) с индексами btree и многому научился.
источник
MySQL имеет подключаемую структуру механизма хранения, возможно, стоит проверить, как создаются механизмы для работы с MySQL.
источник
Звучит как отличный проект. По-видимому, ваша цель - не создать производственное программное обеспечение, а узнать о базах данных и процессе создания системы баз данных.
Я не думаю, что вам нужно проводить много исследований. Кажется, что цель состоит в том, чтобы получить опыт того, что входит в создание системы баз данных на основе узлов.
Вот как бы я начал:
После того, как вы освоите основы, у вас будет гораздо больше понимания того, что сложно или проблематично. Затем вы можете провести исследование, найти некоторые улучшения и интегрировать их.
источник
Написание своей собственной базы данных «чтобы понять, как все это работает» - единственная причина, по которой это нужно сделать (поскольку базы данных сумасшедшие, трудно получить правильные и трудно доказать, что они правильные). Ты сумасшедший, но в хорошем смысле!
Чтобы увидеть, как это делается, предлагаю взглянуть на SQLite. Источник SQLite сжат только на 1,3 МБ и является полностью ACID-совместимой транзакционной базой данных. Это также общественное достояние, и главный автор - хороший парень, который, я уверен, будет рад ответить на ваши вопросы. (Я думаю, что самые хитрые моменты возникают в том, как правильно записать информацию на диск; убедить ОС и аппаратное обеспечение перестать лгать и действительно писать транзакцию СЕЙЧАС на удивление сложно, и поэтому я так рад, что мне никогда не придется писать БД.)
источник
Купить книгу:
http://www.springer.com/computer/database+management+%26+information+retrieval/book/978-1-84628-394-9
Индексы являются наиболее важным аспектом баз данных сегодня. Изучите альтернативы, которые существуют как бинарные деревья.
Также прочитайте о декартовом произведении, которое позволяет рассчитать, насколько сложными будут объединения.
источник
Изучите реляционную алгебру.
Найдите небольшой движок БД, изучите источник.
Нет. Вам необходимо научиться эффективно использовать базу данных. Возможно, вы станете лучшим водителем, если поймете, как работает ваша машина, но вы будете намного лучше, если действительно сосредоточитесь на вождении.
Следуйте традиционным маршрутам: пройдите курс, прочитайте книгу, рецензируйте, задайте вопросы, воспользуйтесь указателем Люка .
источник
Learn relational algebra.
Предполагая, что op заинтересован в реляционных базах данных, конечно ...