Мне интересно узнать, как работает механизм базы данных (т.е. его внутренности). Я знаю большинство базовых структур данных, преподаваемых в CS (деревья, хеш-таблицы, списки и т. Д.), А также довольно хорошее понимание теории компиляторов (и реализовал очень простой интерпретатор), но я не понимаю, как это сделать о написании движка базы данных. Я искал учебники по этому предмету и не смог найти ни одного, поэтому я надеюсь, что кто-то другой может указать мне правильное направление. В основном, я хотел бы получить информацию о следующем:
- Как данные хранятся внутри (т. Е. Как представлены таблицы и т. Д.)
- Как механизм находит данные, которые ему нужны (например, выполнить запрос SELECT)
- Как данные вставляются быстрым и эффективным способом
И любые другие темы, которые могут иметь отношение к этому. Это не обязательно должна быть база данных на диске - даже база данных в памяти - это хорошо (если это проще), потому что я просто хочу изучить принципы, стоящие за ней.
Большое спасибо за вашу помощь.
источник
Ответ на этот вопрос огромен. ожидаю, что докторская диссертация ответит на все 100%;) но мы можем думать о проблемах одна за другой:
Как хранить данные внутри: у вас должен быть файл данных, содержащий объекты вашей базы данных, и механизм кэширования, чтобы загрузить данные в фокусе и некоторые данные вокруг них в RAM, если у вас есть таблица, с некоторыми данными, мы бы создали формат данных преобразовать эту таблицу в двоичный файл, согласовав определение разделителя столбца и разделителя строк и убедившись, что такой шаблон разделителя никогда не используется в ваших данных. т. е. если вы выбрали <*>, например, для разделения столбцов, вы должны проверить данные, которые вы помещаете в эту таблицу, чтобы не содержать этот шаблон. Вы также можете использовать заголовок строки и заголовок столбца, указав размер строки и некоторый внутренний индексный номер, чтобы ускорить поиск, и в начале каждого столбца иметь длину этого столбца, такую как «Адам», 1, 11.1, "
Как быстро найти элементы Попробуйте использовать хеширование и индексирование, чтобы указать на данные, сохраненные и кэшированные на основе различных критериев, используя тот же пример, что и выше, вы можете отсортировать значение первого столбца и сохранить его в отдельном объекте, указывая на идентификатор строки элементов, отсортированных по алфавиту. , и так далее
Как ускорить вставку данных, которые я знаю из Oracle, заключается в том, что они вставляют данные во временное место как в ОЗУ, так и на диск и периодически выполняют служебную работу, ядро базы данных все время оптимизирует свою структуру, но в то же время мы этого не делаем. хотите потерять данные в случае сбоя питания чего-то подобного. поэтому постарайтесь хранить данные во временном месте без сортировки, добавить исходное хранилище и позже, когда система будет свободна, прибегнуть к индексам и очистить временную область, когда это будет сделано.
удачи, отличный проект.
источник
SQLite упоминался ранее, но я хочу добавить кое-что.
Я лично многому научился, изучая SQlite. Интересно то, что я не пошел к исходному коду (хотя я только кратко посмотрел). Я многому научился, читая технический материал и особенно просматривая внутренние команды, которые он генерирует. Он имеет собственный интерпретатор на основе стека, и вы можете прочитать P-код, который он генерирует внутри, просто используя объяснение. Таким образом, вы можете увидеть, как различные конструкции транслируются в низкоуровневый движок (что удивительно просто - но в этом и секрет его стабильности и эффективности).
источник
Есть книги по этой теме, которые можно начать с « Систем баз данных: полная книга » Гарсии-Молины, Уллмана и Видома.
источник
Хорошо, я нашел сайт, на котором есть некоторая информация о SQL и его реализации - немного сложно сослаться на страницу со списком всех учебных пособий, поэтому я буду связывать их по одному:
источник
Я бы предложил сосредоточиться на www.sqlite.org
Это недавно, маленький (исходный код 1 МБ), с открытым исходным кодом (так что вы можете понять это для себя) ...
Были написаны книги о том, как это реализовано:
http://www.sqlite.org/books.html
Он работает на различных операционных системах как для настольных компьютеров, так и для мобильных телефонов, поэтому экспериментировать легко и узнать об этом будет полезно прямо сейчас и в будущем.
Здесь даже есть приличное сообщество: /programming/tagged/sqlite
источник
может быть, вы можете узнать из HSQLDB . Я думаю, что они предлагают небольшую и простую базу данных для обучения. Вы можете посмотреть на коды, так как это с открытым исходным кодом.
источник
Я не уверен, будет ли это соответствовать вашим требованиям, но я реализовал простую файлово-ориентированную базу данных с поддержкой simple (
SELECT, INSERT , UPDATE
) с использованием perl.Я сохранял каждую таблицу в виде файла на диске и записей с четко определенным шаблоном и манипулировал данными, используя встроенные инструменты linux, такие как awk и sed. для повышения эффективности часто используемые данные кэшируются.
источник
Если MySQL вас интересует, я бы также предложил эту вики-страницу , на которой есть некоторая информация о том, как работает MySQL. Кроме того, вы можете взглянуть на Понимание MySQL Internals .
Вы также можете рассмотреть не-SQL-интерфейс для вашего движка базы данных. Пожалуйста, посмотрите на Apache CouchDB . Это то, что вы бы назвали, система баз данных, ориентированная на документы.
Удачи!
источник