Как написать простой механизм базы данных

Мне интересно узнать, как работает механизм базы данных (т.е. внутренние элементы). Я знаю большинство базовых структур данных, преподаваемых в CS (деревья, хеш-таблицы, списки и т.д.), А также довольно хорошее понимание теории компиляторов (и реализовал очень простой интерпретатор), но я не понимаю, как идти о написании механизма базы данных. Я искал учебники по этому вопросу, и я не мог найти их, поэтому я надеюсь, что кто-то другой может указать мне в правильном направлении. В принципе, я хотел бы получить информацию о следующем:

  • Как хранятся данные внутри (например, как представлены таблицы и т.д.).
  • Как движок находит нужные данные (например, запускает запрос SELECT)
  • Как данные вставляются в быстрый и эффективный способ

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

Большое спасибо за вашу помощь.

Ответ 1

Если вы хорошо читаете код, изучение SQLite научит вас всей лодке о дизайне базы данных. Он маленький, так что проще обернуть голову вокруг. Но он также профессионально написан.

http://sqlite.org/

Ответ 2

Ответ на этот вопрос является огромным. ожидайте тезис PHD, на который он ответил 100%;) но мы можем думать о проблемах один за другим:

  • Как хранить данные изнутри: вы должны иметь файл данных, содержащий ваши объекты базы данных, и механизм кэширования для загрузки данных в фокусе и некоторые данные вокруг него в ОЗУ предположим, что у вас есть таблица с некоторыми данными, мы создадим формат данных, чтобы преобразовать эту таблицу в двоичный файл, согласившись с определением разделителя столбцов и разделителя строк и убедитесь, что такой шаблон разделителя никогда не используется в вашем сами данные. т.е. если вы выбрали < * > например, для разделения столбцов, вы должны проверить данные, которые вы помещаете в этой таблице, чтобы не содержать этот шаблон. вы также можете использовать заголовок строки и заголовок столбца, указав размер строки и некоторый внутренний индексный индекс, чтобы ускорить поиск, а в начале каждого столбца иметь длину этого столбца как "Адам", 1, 11.1, "123 ABC Street POBox 456" вы можете иметь это как < & RowHeader, 1 < & Col1, CHR, 4 > Adam < & Col2, num, 1,0 > 1 & Col3, Num, 2,1 > 111 & Col4, CHR, 24 > 123 ABC Street POBox 456 < & RowTrailer >

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

  • Как ускорить ввод данных Я знаю из Oracle, что они вставляют данные во временное место как в ОЗУ, так и на диске и периодически ведут работу на дому, механизм базы данных все время оптимизирует свою структуру, но в то же время мы не хотим потерять данные в случай сбоя питания чего-то подобного. поэтому постарайтесь сохранить данные в этом временном месте без сортировки, добавить исходное хранилище, а позже, когда система будет бесплатной для ваших индексов и очистить область темпа, когда закончите

удачи, отличный проект.

Ответ 4

Я хотел бы остановиться на www.sqlite.org

Это последнее, небольшое (исходный код 1 МБ), с открытым исходным кодом (так что вы можете понять это сами)...

Были написаны книги о том, как это реализовано:

http://www.sqlite.org/books.html

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

Здесь даже есть приличное сообщество: fooobar.com/questions/tagged/...

Ответ 5

Ранее упоминался SQLite, но я хочу добавить кое-что.

Я лично многому научился, изучая SQlite. Интересно, что я не пошел в исходный код (хотя я просто немного поглядел). Я многому научился, прочитав технический материал и специально посмотрев на внутренние команды, которые он создает. У него есть собственный интерпретатор на основе стека, и вы можете прочитать P-код, который он создает внутри, просто используя объяснение. Таким образом, вы можете увидеть, как различные конструкции переводятся на низкоуровневый движок (что удивительно просто, но это также секрет его стабильности и эффективности).

Ответ 6

Возможно, вы можете узнать из HSQLDB. Я думаю, что они предлагают небольшую и простую базу данных для обучения. вы можете посмотреть коды, так как это с открытым исходным кодом.

Ответ 7

Хорошо, я нашел сайт, который имеет некоторую информацию о SQL и реализации - немного сложно связать со страницей, в которой перечислены все учебники, поэтому я буду ссылаться на них один за другим:

Ответ 8

Если MySQL вас интересует, я также предложил бы эту страницу wiki page, в которой есть информация о том, как работает MySQL. Кроме того, вы можете взглянуть на Понимание внутренних языков MySQL.

Вы также можете рассмотреть возможность использования интерфейса, отличного от SQL, для вашего механизма базы данных. Посмотрите Apache CouchDB. Его то, что вы бы назвали, документально ориентированная система баз данных.

Удачи!

Ответ 9

Я не уверен, соответствует ли это вашим требованиям, но я реализовал простую файловую базу данных с поддержкой простой (SELECT, INSERT , UPDATE) с помощью perl.
Я сделал, что я сохранил каждую таблицу в виде файла на диске и записи с четко определенным шаблоном и манипулировал данными, используя встроенные инструменты linux, такие как awk и sed. для повышения эффективности часто выполнялись кэширование часто используемых данных.