База данных
Оригинальное название: database
Коротко
Упорядоченное хранилище данных под управлением специальной программы — СУБД, которая позволяет быстро находить, изменять и защищать записи.
Что такое «База данных»
Всё, что сайт «помнит», лежит в базе данных: статьи и товары, пользователи и заказы, настройки темы и плагинов. Файлы картинок обычно хранятся на диске, а в базе — только сведения о них. Работает с данными не сам сайт, а система управления базами данных (СУБД): MySQL, MariaDB, PostgreSQL. Она следит за целостностью, позволяет нескольким посетителям одновременно читать и писать и восстанавливается после сбоев.
Как устроена реляционная база
Большинство сайтов используют реляционные базы. Данные лежат в таблицах: строка — одна запись, столбец — одно поле. Таблицы связаны ключами: в заказе хранится не имя покупателя, а его идентификатор. Запросы к таким базам пишут на языке SQL:
SELECT ID, post_title
FROM wp_posts
WHERE post_type = 'product' AND post_status = 'publish'
ORDER BY post_date DESC
LIMIT 10;
Запрос возвращает десять последних опубликованных товаров магазина на WooCommerce. Для задач, где таблицы неудобны, — кеша, очередей, документов с меняющейся структурой — применяют NoSQL-хранилища вроде Redis или MongoDB.
База данных сайта на CMS
WordPress хранит записи и страницы в wp_posts, их дополнительные поля — в wp_postmeta, настройки — в wp_options. В 1С-Битрикс таблицы начинаются с b_, например элементы инфоблоков лежат в b_iblock_element. Обычно с базой работают через функции CMS, а не прямыми запросами: так сохраняются кеши, события и совместимость с обновлениями. Прямой SQL оправдан для отчётов и массовых операций, но перед ним нужна резервная копия — как её делать, разобрано в статье про резервное копирование сайта.
Что замедляет базу
- Отсутствие индексов: поиск по неиндексированному полю заставляет СУБД просматривать всю таблицу.
- Разросшиеся таблицы: тысячи ревизий записей, автозагружаемые опции брошенных плагинов, журналы, которые никто не чистит.
- Много мелких запросов там, где хватило бы одного, — частая беда самописных циклов в шаблонах.
- Настройки СУБД по умолчанию на сервере с большим объёмом данных: например, слишком маленький буфер для кеширования таблиц в памяти.
Для операций, которые должны пройти целиком или не пройти вовсе, — списание остатка и создание заказа — используют транзакции.

