Базы данных

Базы данных #

Документ посвящен знаниям по базам данных, необходимых для реализации проектов. Базы данных - один из ключевых навыков для бэкенд разработчиков.

SQL #

Что нужно знать:

  • SQL синтаксис - SELECT, INSERT, UPDATE/DELETE, GROUP BY, JOIN
  • Создание таблиц
  • Индексы и первичный ключ
  • Внешние ключи
  • RDBMS - MySQL, Postgres. Различные книги/курсы, как правило, учат SQL в контексте в одной из этих двух систем управления баз данных. Для джуниров разница между ними не принципиальна
  • Embedded SQL databases - SQLite

Избранные курсы и учебные ресурсы #

Работа с базой данных в Go #

В Go нет единого “драйвера” для бд, но есть единый интерфейс - пакет database/sql из стандартной библиотеки. Он определяет интерфейсы (*sql.DB, *sql.Row, *sql.Rows), а конкретные СУБД подключаются через драйверы-пакеты.

Примеры драйвер-пакетов:

  • github.com/jackc/pgx - современный, высокопроизводительный драйвер PostgreSQL.
  • github.com/jmoiron/sqlx - расширение database/sql: поддержка сканирования в структуры, именованные параметры, Select/Get, безопасные запросы с шаблонами.

Что нужно уметь:

  • Подключать библиотеки для работы c бд.
  • Создавать таблицы
  • Читать данные из таблиц в ассоциативные массивы или в экземпляры классов-моделей

Избранные курсы и учебные ресурсы #

ORM #

ORM (Object-Relational Mapping) — это инструмент, который сопоставляет записи в реляционной базе данных с объектами в коде. ORM в Go не являются стандартом, и часто не рекомендуются к использованию. В качестве практики мы рассмотрим их, а также более часто применямый подход - Query builders.

Query builders #

Query builders — это инструменты, позволяющие строить SQL-запросы программно, через цепочки вызовов методов, сохраняя контроль над SQL и обеспечивая типобезопасность и читаемость. В отличие от ORM, они не абстрагируют базу данных полностью, а лишь помогают безопасно и удобно формировать запросы, минимизируя риски SQL-инъекций и упрощая поддержку сложных сценариев.

Инструменты миграций #

Миграции SQL баз данных - инструмент версионирования структуры таблиц и данных, который позволяет бесшовно менять и дополнять состояние таблиц в проектах. Проводя аналогию с git, одна миграция эквивалента одному коммиту, только субъектом изменения является база данных, а не репозиторий с кодом. Широко используется в коммерческих проектах.

2 самых популярных инструмента для Go Backend приложений - Goose, Go-Migrate. Советую попробовать оба.

Что нужно уметь:

  • Интегрировать инструмент миграций в приложение на Go
  • Писать миграции, меняющие схему БД и данные внутри таблиц
  • Применять новые миграции к уже задеплоенному проекту

Избранные курсы и учебные ресурсы #

NoSQL базы данных #

SQL - самая нужная для джуниора технология для хранения, но кроме SQL существуют десятки инструментов для хранения данных, созданных под ситуации, где SQL излишен, либо неудобен. Знать все типы баз данных на практике - невозможно, их слишком много. Достаточно иметь представление о том, какие из них и в каких ситуациях используются.

В рамках проектов, на практике поработаем с S3/Minio - хранилищем файлов, и Redis - хранилищем кэша/сессий.

Избранные курсы и учебные ресурсы #

  • Практика - проекты 6 и 7

Что дальше #

Перечисленные выше знания и инструменты - база для Go Junior (кроме NoSQL). Если есть желание и необходимость углубиться в Backend технологии, советую обратить внимание на:

  • Document-oriented DB - MongoDB
  • Key-value storage - Redis