База данных (БД) — организованная система хранения и управления данными, обеспечивающая их структурированное хранение, эффективный поиск и транзакционную целостность. Для большинства веб-приложений БД — узкое место производительности: правильный выбор СУБД и схемы данных определяет масштабируемость системы.
Типы баз данных
| Тип | Модель | Примеры | Применение |
|---|---|---|---|
| Реляционные (SQL) | Таблицы с отношениями | PostgreSQL, MySQL, MariaDB, MS SQL | Транзакции, финансы, CRM |
| Документные | JSON/BSON документы | MongoDB, CouchDB | CMS, каталоги с гибкой схемой |
| Ключ-значение | Хэш-таблица | Redis, Memcached | Кэш, сессии, очереди |
| Колоночные | Столбцы вместо строк | Cassandra, ClickHouse | Аналитика, Big Data |
| Полнотекстовые | Инвертированный индекс | Elasticsearch | Поиск по сайту |
| Графовые | Узлы и рёбра | Neo4j | Соцсети, рекомендации |
ACID и транзакции
ACID — четыре свойства надёжных транзакций в реляционных СУБД:
- Atomicity (атомарность) — всё или ничего: транзакция либо выполняется полностью, либо отменяется.
- Consistency (согласованность) — БД переходит из одного корректного состояния в другое.
- Isolation (изоляция) — параллельные транзакции не видят незафиксированные изменения друг друга.
- Durability (долговечность) — зафиксированные данные сохраняются даже при сбое питания.
NoSQL-базы часто жертвуют частью ACID ради производительности и горизонтального масштабирования (BASE: Basically Available, Soft state, Eventually consistent).
История
Первые системы управления данными появились в 1960-х: IBM IMS (1966) создавалась для лунной программы Apollo. Реляционная модель Эдгара Кодда (Edgar Codd) опубликована в 1970 году в статье «A Relational Model of Data for Large Shared Data Banks» в журнале ACM. SQL стандартизирован в 1986 году (SQL-86). В 2007–2010 годах появились NoSQL-базы данных для работы с Big Data: Cassandra (Facebook, 2008), MongoDB (2009), Redis (2009).
Выбор СУБД для хостинга
MariaDB/MySQL — стандарт для виртуального хостинга. PostgreSQL — для сложных запросов, JSON, полнотекстового поиска, геоданных. SQLite — для приложений без сетевого доступа: не требует отдельного сервера, хранится в одном файле.
Размещение СУБД: на том же сервере — минимальная задержка, но конкурируют за ресурсы. На отдельном VPS — изоляция, независимое масштабирование. Managed-СУБД (RDS, Cloud SQL) — делегирование backups, failover, обновлений провайдеру.
На что обращать внимание
Резервное копирование БД — обязательная часть production-настройки. Индексы ускоряют SELECT, замедляют INSERT/UPDATE — индексировать только те поля, по которым реально ищут. Репликация обеспечивает высокую доступность и читающую нагрузку на реплики. Connection pooling (PgBouncer для PostgreSQL, ProxySQL для MySQL) снижает накладные расходы на открытие новых соединений.