База данных I. Разработка собственного механизма хранения данных или создание собственной базы данных.

Я начал программировать около семи лет назад. Как и каждый начинающий молодой разработчик, я всегда мечтал о разработке огромного приложения, чего-то очень сложного, которое лучше, чем все, что делали другие люди. Даже если последнее будет не так просто, каждый будет пытаться делать какие-то проекты самостоятельно. Разработка вашего первого маленького веб-сервера, языка программирования и так далее. Но есть темы, по которым нет золотого пути. Вы не найдете пошагового руководства по разработке собственной базы данных, и поэтому это чертовски интересно для любого разработчика: это загадка, приключение. Это сложно и нетривиально, и вы поймете, что действительно проделали настоящую работу, когда закончите ее. Что ж, давайте поговорим о том, как сбылась ваша мечта о собственной базе данных. Это история о том, как мы с другом создали нашу собственную небольшую базу данных и какие испытания и приключения нам пришлось пройти.

Самое начало

Было холодное утро, когда мой друг написал мне о том, что он только что разработал: простое хранилище данных. Это не было сложно или революционно, это было рождением более крупного проекта. Доказательство концепции позволило сохранить лишь небольшой ограниченный объем данных в простой системе значений ключа. Вы не могли ни удалить данные, ни заменить их, но это было самое начало.

Встречная часть

Существует знаменитый набор правил: основные правила разработки СУБД.

Правило 1. Для разработки хорошей СУБД требуется 5–7 лет и десятки миллионов долларов.
Правило 2. Вы не являетесь исключением из правила 1.

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

«Открытие требует экспериментов».
- Дэниел Уайтхолл

Цели проекта

Мы хотим заархивировать следующие функции и возможности:

  • Поддержка операций CRUD
  • Поддержка необработанных данных и записей json
  • Связь с базой данных через REST
  • Связь с базой данных по бинарному протоколу
  • 100% тестовое покрытие

Самые основные мысли

Изучая наши требования, мы можем указать, о чем мы должны думать. Наш первый шаг будет говорить о доступе к файлам низкого уровня. Затем мы создадим слой, который закроет доступ к этим файлам низкого уровня для чтения данных и индексов. Эта функция будет объединена в индекс хранилища, который будет работать с индексами и запросами. Механизм хранения будет запускаться базой данных, управляемой органом, который может обрабатывать несколько баз данных. Эти базы данных должны быть доступны через сервер. Смешно звучит? Давайте немного визуализируем это. Сначала рассмотрим единую базу данных:

Как уже упоминалось, управление базами данных будет осуществляться менеджером. Этот менеджер контролирует, где расположены базы данных, и при необходимости загружает и выгружает базы данных. Как только у нас будет такой менеджер, мы можем добавить серверный слой.

На этом пока все! Следующая часть будет посвящена низкоуровневому доступу к файлам: