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

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

  1. Знание баз данных в целом и их реализации
  2. Понимание C и структур данных
  3. Навыки письма и общения

Я буду использовать несколько ресурсов для этого проекта, в первую очередь книгу Сибсанкара Халдара: Система баз данных SQLite: проектирование и реализация. Наряду с документацией, предоставленной SQLite, и самой кодовой базой. Надеюсь, кодовая база мне не понадобится, но если я застряну, у меня будет возможность проверить свою работу.

Архитектура SQLite относительно проста. Интерфейсу дается команда, где программа затем разбивает ее на более мелкие фрагменты, которые может легко понять генератор кода, который делает много работы за кулисами для создания наиболее эффективного байт-кода (низкоуровневый код, отвечающий за за работу над оператором SQL). Вход — это команда SQL, а выход — байт-код.

Затем этот байт-код передается виртуальной машине, которая выполняет операции с одной или несколькими таблицами или индексами. Затем данные сохраняются на диске в виде B-Tree. B-деревья — это невероятные структуры данных, которые обеспечивают очень низкую среднюю и наихудшую скорость при вставке, поиске и удалении. Кэш страниц отвечает за чтение и запись данных на диск, когда их запрашивает модуль B-Tree. Наконец, интерфейс ОС отвечает за поддержку нескольких ОС, на которых я не буду акцентировать внимание.

Завтра я начну свою (скорее всего ужасную) реализацию SQLite.