200 вопросов по базам данных
200 вопросов по базам данных
Основы баз данных
Вопрос
Что такое база данных?
Ответ
База данных — это организованная совокупность структурированных данных, хранящихся и управляемых с помощью системы управления базами данных (СУБД). Она предназначена для эффективного хранения, поиска, обновления и удаления информации.
Вопрос
Что такое СУБД?
Ответ
Система управления базами данных (СУБД) — это программное обеспечение, обеспечивающее создание, управление, защиту и взаимодействие с базами данных. СУБД предоставляет интерфейс для выполнения операций над данными и гарантирует их целостность, безопасность и доступность.
Вопрос
Какие основные типы баз данных существуют?
Ответ
Основные типы баз данных включают реляционные, документные, ключ-значение, колоночные, графовые и временные базы данных. Каждый тип оптимизирован под определённые сценарии использования и модели данных.
Вопрос
Что такое таблица в контексте реляционной базы данных?
Ответ
Таблица — это структура данных в реляционной базе, состоящая из строк и столбцов. Каждая строка представляет одну запись (кортеж), а каждый столбец — атрибут с определённым типом данных.
Вопрос
Что такое запись (строка) в таблице?
Ответ
Запись — это одна строка в таблице, содержащая конкретные значения всех атрибутов (столбцов) этой таблицы. Запись представляет собой экземпляр сущности, описываемой таблицей.
Вопрос
Что такое поле (столбец) в таблице?
Ответ
Поле — это столбец в таблице, определяющий один атрибут сущности. Каждое поле имеет имя и тип данных, например INTEGER, VARCHAR, DATE.
Вопрос
Что такое первичный ключ?
Ответ
Первичный ключ — это один или несколько столбцов таблицы, однозначно идентифицирующих каждую запись. Значения первичного ключа уникальны и не могут быть NULL.
Вопрос
Что такое внешний ключ?
Ответ
Внешний ключ — это столбец или набор столбцов в одной таблице, ссылающийся на первичный ключ другой таблицы. Он обеспечивает ссылочную целостность между связанными таблицами.
Вопрос
Что такое индекс в базе данных?
Ответ
Индекс — это вспомогательная структура данных, ускоряющая поиск и сортировку записей по определённым столбцам. Индекс создаётся на основе одного или нескольких полей таблицы.
Вопрос
Какие бывают виды индексов?
Ответ
Основные виды индексов:
- Уникальный индекс — запрещает дублирование значений.
- Составной индекс — строится по нескольким столбцам.
- Кластеризованный индекс — определяет физический порядок хранения строк в таблице.
- Некластеризованный индекс — хранится отдельно от данных и содержит указатели на строки.
Вопрос
Что такое NULL в базе данных?
Ответ
NULL — это специальное значение, обозначающее отсутствие данных. Оно не эквивалентно нулю, пустой строке или ложному значению. Операции с NULL возвращают UNKNOWN в логике трёхзначной логики SQL.
Вопрос
Что такое схема базы данных?
Ответ
Схема базы данных — это описание структуры данных: таблиц, столбцов, типов, ограничений, индексов и связей между объектами. Схема определяет, как данные организованы и как они связаны друг с другом.
Вопрос
Что такое экземпляр базы данных?
Ответ
Экземпляр базы данных — это совокупность текущих данных, хранящихся в структурах, определённых схемой. Если схема — это чертёж, то экземпляр — это здание, построенное по этому чертежу.
Вопрос
Что такое целостность данных?
Ответ
Целостность данных — это свойство, гарантирующее точность, согласованность и корректность данных в течение всего их жизненного цикла. Целостность обеспечивается ограничениями, такими как PRIMARY KEY, FOREIGN KEY, CHECK, NOT NULL.
Вопрос
Что такое ограничение (constraint)?
Ответ
Ограничение — это правило, накладываемое на данные в таблице для поддержания их корректности. Примеры: PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK, NOT NULL.
Вопрос
Что такое представление (view)?
Ответ
Представление — это виртуальная таблица, определённая запросом к одной или нескольким реальным таблицам. Представление не хранит данные физически, а вычисляется при обращении к нему.
Вопрос
Зачем используют представления?
Ответ
Представления применяются для упрощения сложных запросов, обеспечения безопасности (ограничение доступа к подмножеству данных) и абстрагирования изменений в структуре базы от пользователей.
Вопрос
Что такое хранимая процедура?
Ответ
Хранимая процедура — это именованный блок кода на языке SQL или процедурном расширении СУБД, сохранённый в базе данных и исполняемый по вызову. Процедура может принимать параметры, выполнять логику и возвращать результаты.
Вопрос
Что такое триггер?
Ответ
Триггер — это специальный вид хранимого кода, автоматически выполняемый при наступлении определённого события (например, INSERT, UPDATE, DELETE) в указанной таблице или представлении.
Вопрос
Что такое транзакция?
Ответ
Транзакция — это последовательность операций над базой данных, выполняемых как единое целое. Все операции в транзакции либо завершаются успешно и фиксируются, либо откатываются полностью в случае ошибки.
Реляционная модель и нормализация
Вопрос
Что такое реляционная модель данных?
Ответ
Реляционная модель данных — это способ организации данных в виде таблиц (отношений), где каждая таблица состоит из строк и столбцов, а связи между таблицами устанавливаются через ключи. Модель основана на теории множеств и логике предикатов первого порядка.
Вопрос
Что такое отношение в реляционной модели?
Ответ
Отношение — это математическое представление таблицы: конечное множество кортежей (строк), каждый из которых соответствует одному экземпляру сущности. Все кортежи имеют одинаковую структуру, определяемую набором атрибутов (столбцов).
Вопрос
Что такое домен в реляционной модели?
Ответ
Домен — это множество допустимых значений для одного или нескольких атрибутов. Например, домен «возраст» может быть задан как целые числа от 0 до 150.
Вопрос
Что такое степень отношения?
Ответ
Степень отношения — это количество атрибутов (столбцов) в таблице. Например, таблица с пятью столбцами имеет степень 5.
Вопрос
Что такое кардинальность отношения?
Ответ
Кардинальность отношения — это количество кортежей (строк) в таблице. Она может изменяться со временем при добавлении или удалении записей.
Вопрос
Что такое функциональная зависимость?
Ответ
Функциональная зависимость — это связь между двумя множествами атрибутов, при которой значение одного множества однозначно определяет значение другого. Обозначается как X → Y, где X и Y — множества атрибутов.
Вопрос
Что означает полная функциональная зависимость?
Ответ
Полная функциональная зависимость означает, что неключевой атрибут зависит от всего составного первичного ключа, а не от его части. Это требование второй нормальной формы.
Вопрос
Что такое транзитивная зависимость?
Ответ
Транзитивная зависимость возникает, когда неключевой атрибут зависит от другого неключевого атрибута, который, в свою очередь, зависит от первичного ключа. Такая зависимость нарушает третью нормальную форму.
Вопрос
Что такое нормализация базы данных?
Ответ
Нормализация — это процесс приведения структуры базы данных к набору нормальных форм с целью устранения избыточности, аномалий обновления и обеспечения целостности данных.
Вопрос
Какие основные цели нормализации?
Ответ
Основные цели нормализации:
- Устранение дублирования данных.
- Предотвращение аномалий вставки, обновления и удаления.
- Обеспечение гибкости и масштабируемости схемы.
- Упрощение поддержки и модификации структуры.
Вопрос
Что такое первая нормальная форма (1НФ)?
Ответ
Первая нормальная форма требует, чтобы все атрибуты таблицы содержали только атомарные (неделимые) значения, и каждая ячейка содержала ровно одно значение.
Пример нарушения: столбец телефоны содержит список номеров через запятую.
Исправление: вынести телефоны в отдельную таблицу.
Вопрос
Что такое вторая нормальная форма (2НФ)?
Ответ
Вторая нормальная форма требует, чтобы таблица находилась в 1НФ и все неключевые атрибуты зависели от всего первичного ключа, а не от его части. Это актуально только для таблиц с составным первичным ключом.
Вопрос
Что такое третья нормальная форма (3НФ)?
Ответ
Третья нормальная форма требует, чтобы таблица находилась во 2НФ и ни один неключевой атрибут не зависел транзитивно от первичного ключа. То есть все неключевые атрибуты должны зависеть напрямую от ключа.
Вопрос
Что такое форма Бойса—Кодда (BCNF)?
Ответ
Форма Бойса—Кодда — усиленная версия 3НФ. Таблица находится в BCNF, если для каждой нетривиальной функциональной зависимости X → Y множество X является суперключом.
Вопрос
В чём разница между 3НФ и BCNF?
Ответ
В 3НФ допускается зависимость от ключа через другой ключевой атрибут. В BCNF любая детерминанта (левая часть зависимости) должна быть суперключом. BCNF исключает больше видов аномалий, но не всегда достижима без потерь.
Вопрос
Что такое четвёртая нормальная форма (4НФ)?
Ответ
Четвёртая нормальная форма устраняет многозначные зависимости. Таблица находится в 4НФ, если она в BCNF и не содержит нетривиальных многозначных зависимостей.
Вопрос
Что такое многозначная зависимость?
Ответ
Многозначная зависимость X ↠ Y означает, что для каждого значения X существует фиксированный набор значений Y, независимо от других атрибутов. Например, у преподавателя может быть несколько курсов и несколько хобби, независимо друг от друга.
Вопрос
Что такое пятая нормальная форма (5НФ)?
Ответ
Пятая нормальная форма (проекционно-соединительная нормальная форма) устраняет зависимости соединения. Таблица в 5НФ не может быть потеряно при декомпозиции на три и более таблицы и последующем соединении без восстановления исходных данных.
Вопрос
Когда нормализацию следует остановить?
Ответ
Нормализацию останавливают, когда дальнейшая декомпозиция начинает снижать производительность из-за большого числа соединений, или когда бизнес-логика требует денормализации для упрощения запросов или повышения скорости чтения.
Вопрос
Что такое денормализация?
Ответ
Денормализация — это сознательное введение избыточности в структуру базы данных для повышения производительности запросов за счёт уменьшения количества соединений и упрощения выборок.
SQL: DDL, DML, DCL
Вопрос
Что такое SQL?
Ответ
SQL (Structured Query Language) — это стандартный язык для работы с реляционными базами данных. Он используется для определения структуры данных, манипулирования данными и управления доступом к ним.
Вопрос
На какие основные категории делятся команды SQL?
Ответ
Команды SQL делятся на четыре основные категории:
- DDL (Data Definition Language) — определение структуры.
- DML (Data Manipulation Language) — манипулирование данными.
- DCL (Data Control Language) — управление доступом.
- TCL (Transaction Control Language) — управление транзакциями.
Вопрос
Что такое DDL?
Ответ
DDL (Data Definition Language) — это подмножество SQL, предназначенное для определения и изменения структуры объектов базы данных. Основные команды: CREATE, ALTER, DROP, TRUNCATE.
Вопрос
Приведите пример команды CREATE TABLE.
Ответ
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
department_id INT,
salary DECIMAL(10, 2),
FOREIGN KEY (department_id) REFERENCES departments(id)
);
Вопрос
Что делает команда ALTER TABLE?
Ответ
Команда ALTER TABLE изменяет структуру существующей таблицы: добавляет, удаляет или изменяет столбцы, ограничения, индексы и другие свойства.
Пример:
ALTER TABLE employees ADD COLUMN email VARCHAR(255);
Вопрос
В чём разница между DROP TABLE и TRUNCATE TABLE?
Ответ
DROP TABLE удаляет всю таблицу, включая её структуру, индексы и ограничения.
TRUNCATE TABLE удаляет все строки из таблицы, сохраняя её структуру. TRUNCATE обычно не может быть откатан и не вызывает триггеров.
Вопрос
Что такое DML?
Ответ
DML (Data Manipulation Language) — это подмножество SQL для работы с данными внутри таблиц. Основные команды: SELECT, INSERT, UPDATE, DELETE.
Вопрос
Приведите пример команды INSERT.
Ответ
INSERT INTO employees (id, name, department_id, salary)
VALUES (1, 'Анна Петрова', 3, 75000.00);
Вопрос
Как работает команда UPDATE?
Ответ
Команда UPDATE изменяет значения существующих строк в таблице. Обязательно указывается условие WHERE, чтобы избежать изменения всех строк.
Пример:
UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 3;
Вопрос
Что делает команда DELETE?
Ответ
Команда DELETE удаляет строки из таблицы. Без условия WHERE удаляются все строки. Операция может быть откатана, если выполняется в рамках транзакции.
Пример:
DELETE FROM employees WHERE id = 1;
Вопрос
Что такое SELECT?
Ответ
SELECT — это команда DML для извлечения данных из одной или нескольких таблиц. Она поддерживает фильтрацию (WHERE), сортировку (ORDER BY), группировку (GROUP BY) и агрегацию.
Вопрос
Приведите пример простого SELECT-запроса.
Ответ
SELECT name, salary
FROM employees
WHERE salary > 50000
ORDER BY salary DESC;
Вопрос
Что такое DCL?
Ответ
DCL (Data Control Language) — это подмножество SQL для управления правами доступа пользователей к объектам базы данных. Основные команды: GRANT и REVOKE.
Вопрос
Что делает команда GRANT?
Ответ
Команда GRANT предоставляет пользователю или роли определённые привилегии на объекты базы данных, такие как SELECT, INSERT, UPDATE, DELETE, EXECUTE.
Пример:
GRANT SELECT ON employees TO analyst_user;
Вопрос
Что делает команда REVOKE?
Ответ
Команда REVOKE отменяет ранее предоставленные привилегии у пользователя или роли.
Пример:
REVOKE DELETE ON employees FROM junior_user;
Вопрос
Что такое псевдоним (alias) в SQL?
Ответ
Псевдоним — это временное имя, присваиваемое таблице или столбцу в запросе для упрощения чтения или ссылки. Используется с ключевым словом AS (необязательно).
Пример:
SELECT e.name AS employee_name
FROM employees AS e;
Вопрос
Что такое литерал в SQL?
Ответ
Литерал — это константное значение, записанное непосредственно в запросе: строка 'Иван', число 42, дата DATE '2025-01-01'.
Вопрос
Какие типы данных поддерживаются в SQL?
Ответ
Основные типы данных в SQL:
- Числовые:
INTEGER,DECIMAL,FLOAT. - Строковые:
CHAR,VARCHAR,TEXT. - Дата и время:
DATE,TIME,TIMESTAMP. - Логический:
BOOLEAN. - Бинарные:
BLOB,BYTEA.
Вопрос
Что такое NULL-значение в SQL?
Ответ
NULL обозначает отсутствие значения. Сравнение с NULL через = всегда даёт UNKNOWN. Для проверки используется IS NULL или IS NOT NULL.
Вопрос
Как работает оператор LIKE?
Ответ
Оператор LIKE используется для сравнения строк по шаблону. Символ % означает любое количество символов, _ — один символ.
Пример:
SELECT name FROM employees WHERE name LIKE 'А%';
Индексы и производительность
Вопрос
Что такое индекс в базе данных?
Ответ
Индекс — это структура данных, ускоряющая поиск строк в таблице по значениям одного или нескольких столбцов. Индекс хранится отдельно от самих данных и содержит отсортированные значения ключей с указателями на соответствующие строки.
Вопрос
Какие основные типы индексов существуют?
Ответ
Основные типы индексов:
- Кластеризованный индекс — определяет физический порядок хранения строк в таблице. В таблице может быть только один кластеризованный индекс.
- Некластеризованный индекс — хранится отдельно от данных и содержит ссылки на строки. Таких индексов может быть несколько.
- Уникальный индекс — гарантирует уникальность значений в индексируемых столбцах.
- Составной индекс — строится по нескольким столбцам.
- Функциональный индекс — строится по результату выражения или функции над столбцами.
Вопрос
Как работает кластеризованный индекс?
Ответ
Кластеризованный индекс определяет физический порядок строк в таблице на диске. При поиске по такому индексу СУБД сразу получает данные без дополнительного обращения к таблице.
Вопрос
Почему в таблице может быть только один кластеризованный индекс?
Ответ
Потому что строки таблицы физически хранятся в одном порядке. Невозможно одновременно хранить одну и ту же строку в двух разных физических последовательностях.
Вопрос
Что такое покрывающий индекс?
Ответ
Покрывающий индекс — это некластеризованный индекс, содержащий все столбцы, необходимые для выполнения запроса. Благодаря этому СУБД не обращается к самой таблице, что повышает производительность.
Пример:
CREATE INDEX idx_covering ON orders (customer_id) INCLUDE (order_date, total);
Вопрос
Когда индекс не используется?
Ответ
Индекс может не использоваться, если:
- Запрос использует функцию над индексируемым столбцом (
WHERE UPPER(name) = 'IVAN'). - Условие включает
NOT,!=илиIS NULL. - Выборка затрагивает большую часть таблицы (СУБД выбирает полное сканирование как более эффективное).
- Статистика по таблице устарела.
Вопрос
Что такое селективность индекса?
Ответ
Селективность — это мера уникальности значений в индексируемом столбце. Высокая селективность (много уникальных значений) делает индекс более эффективным. Например, индекс по email более селективен, чем по пол.
Вопрос
Как влияет количество индексов на производительность записи?
Ответ
Каждый индекс замедляет операции вставки, обновления и удаления, потому что СУБД должна поддерживать актуальность всех индексов при изменении данных. Чем больше индексов — тем выше накладные расходы на запись.
Вопрос
Что такое фрагментация индекса?
Ответ
Фрагментация индекса — это неупорядоченное физическое размещение страниц индекса на диске, возникающее при частых вставках, обновлениях и удалениях. Фрагментация снижает производительность чтения.
Вопрос
Как устранить фрагментацию индекса?
Ответ
Фрагментацию устраняют двумя способами:
REORGANIZE— перестраивает листовые страницы индекса, занимает меньше ресурсов.REBUILD— полностью пересоздаёт индекс, устраняя всю фрагментацию, но требует больше времени и места.
Вопрос
Что такое план выполнения запроса?
Ответ
План выполнения запроса — это последовательность операций, которые СУБД планирует выполнить для получения результата запроса. План показывает, какие индексы используются, как соединяются таблицы и в каком порядке выполняются шаги.
Вопрос
Как получить план выполнения запроса?
Ответ
В большинстве СУБД используется команда EXPLAIN или её аналог:
- PostgreSQL, MySQL:
EXPLAIN SELECT ... - SQL Server:
SET SHOWPLAN_ALL ONили графический план в SSMS - Oracle:
EXPLAIN PLAN FOR ...
Вопрос
Что означает операция «Index Seek»?
Ответ
«Index Seek» — это эффективная операция, при которой СУБД переходит непосредственно к нужным записям в индексе по значению ключа, не просматривая весь индекс.
Вопрос
Что означает операция «Index Scan»?
Ответ
«Index Scan» — это просмотр всего индекса от начала до конца. Эта операция менее эффективна, чем «Seek», особенно для больших индексов.
Вопрос
Что такое кардинальность в плане запроса?
Ответ
Кардинальность в плане запроса — это оценочное количество строк, которое СУБД ожидает получить на каждом этапе выполнения. Точная оценка важна для выбора оптимальной стратегии выполнения.
Вопрос
Как статистика влияет на план запроса?
Ответ
Статистика содержит информацию о распределении значений в столбцах. Оптимизатор запросов использует её для оценки селективности условий и выбора наиболее эффективного плана. Устаревшая статистика приводит к неоптимальным планам.
Вопрос
Что такое параметризованный запрос?
Ответ
Параметризованный запрос — это запрос, в котором значения передаются через параметры, а не встроены напрямую в текст. Это позволяет СУБД повторно использовать план выполнения для разных значений.
Пример:
SELECT * FROM users WHERE id = ?;
Вопрос
Почему повторное использование плана важно?
Ответ
Повторное использование плана экономит время на его генерацию и снижает нагрузку на CPU. Это особенно важно для часто выполняемых запросов.
Вопрос
Что такое «плохой» план запроса?
Ответ
«Плохой» план запроса — это план, приводящий к неоправданно высокому времени выполнения из-за неэффективных операций: полных сканирований вместо поиска по индексу, неправильного порядка соединений, избыточных сортировок.
Вопрос
Как улучшить производительность медленного запроса?
Ответ
Для улучшения производительности:
- Проанализировать план выполнения.
- Добавить или изменить индексы.
- Переписать запрос (избегать функций над столбцами, подзапросов там, где возможны JOIN).
- Обновить статистику.
- Рассмотреть денормализацию или материализованные представления.
Транзакции и ACID
Вопрос
Что такое транзакция в базе данных?
Ответ
Транзакция — это логическая единица работы, состоящая из одной или нескольких операций над данными, которые выполняются как единое целое. Результат транзакции либо полностью сохраняется, либо полностью отменяется.
Вопрос
Какие четыре свойства определяют корректную транзакцию?
Ответ
Четыре свойства транзакции составляют акроним ACID:
- Atomicity (Атомарность)
- Consistency (Согласованность)
- Isolation (Изолированность)
- Durability (Долговечность)
Вопрос
Что означает атомарность транзакции?
Ответ
Атомарность гарантирует, что все операции внутри транзакции выполняются полностью или ни одна из них не применяется. Недопустимо частичное применение изменений.
Вопрос
Что означает согласованность транзакции?
Ответ
Согласованность означает, что транзакция переводит базу данных из одного корректного состояния в другое, соблюдая все заданные ограничения: внешние ключи, уникальность, проверки и бизнес-правила.
Вопрос
Что означает изолированность транзакции?
Ответ
Изолированность гарантирует, что параллельно выполняемые транзакции не влияют друг на друга так, как если бы они выполнялись последовательно. Это предотвращает аномалии чтения и записи.
Вопрос
Что означает долговечность транзакции?
Ответ
Долговечность означает, что после подтверждения завершения транзакции её изменения сохраняются в базе данных навсегда, даже в случае сбоя системы или отключения питания.
Вопрос
Как начинается и завершается транзакция?
Ответ
Транзакция начинается неявно при первом DML-запросе или явно командой BEGIN TRANSACTION (или START TRANSACTION). Завершается командой COMMIT (фиксация) или ROLLBACK (откат).
Вопрос
Что делает команда COMMIT?
Ответ
Команда COMMIT фиксирует все изменения, сделанные в рамках текущей транзакции, и делает их видимыми для других транзакций. После COMMIT изменения нельзя откатить.
Вопрос
Что делает команда ROLLBACK?
Ответ
Команда ROLLBACK отменяет все изменения, сделанные в текущей транзакции, и возвращает базу данных в состояние, существовавшее до начала транзакции.
Вопрос
Что такое точка сохранения (savepoint)?
Ответ
Точка сохранения — это промежуточная метка внутри транзакции, к которой можно выполнить частичный откат без отмены всей транзакции. Создаётся командой SAVEPOINT.
Пример:
SAVEPOINT sp1;
-- ... операции ...
ROLLBACK TO sp1;
Вопрос
Что такое уровень изоляции транзакций?
Ответ
Уровень изоляции определяет степень видимости изменений, внесённых одной транзакцией, для других параллельных транзакций. Он регулирует компромисс между производительностью и защитой от аномалий.
Вопрос
Какие стандартные уровни изоляции определены в SQL?
Ответ
Стандарт ANSI/ISO определяет четыре уровня изоляции:
- Read Uncommitted
- Read Committed
- Repeatable Read
- Serializable
Вопрос
Что такое «грязное чтение»?
Ответ
«Грязное чтение» — это чтение данных, изменённых другой транзакцией, которая ещё не завершилась. Если эта транзакция будет откачена, прочитанные данные окажутся недействительными.
Вопрос
Что такое «неповторяющееся чтение»?
Ответ
«Неповторяющееся чтение» возникает, когда транзакция читает одну и ту же строку дважды, но получает разные значения, потому что другая транзакция изменила и зафиксировала эту строку между чтениями.
Вопрос
Что такое «фантомное чтение»?
Ответ
«Фантомное чтение» происходит, когда транзакция повторно выполняет запрос с тем же условием, но получает дополнительные строки, вставленные и зафиксированные другой транзакцией между вызовами.
Вопрос
Какой уровень изоляции предотвращает грязное чтение?
Ответ
Уровень Read Committed и выше предотвращают грязное чтение. На уровне Read Uncommitted грязное чтение допускается.
Вопрос
Какой уровень изоляции предотвращает неповторяющееся чтение?
Ответ
Уровень Repeatable Read и Serializable предотвращают неповторяющееся чтение. На уровне Repeatable Read строки, прочитанные в транзакции, блокируются от изменений другими транзакциями до завершения текущей.
Вопрос
Какой уровень изоляции предотвращает фантомное чтение?
Ответ
Только уровень Serializable полностью предотвращает фантомное чтение. Некоторые СУБД (например, PostgreSQL) реализуют Repeatable Read так, что он также блокирует фантомы.
Вопрос
Что такое optimistic concurrency control?
Ответ
Optimistic concurrency control — это стратегия управления конкурентным доступом, при которой транзакции выполняются без блокировок, а конфликты проверяются только при фиксации. Если обнаружен конфликт, транзакция откатывается.
Вопрос
Что такое pessimistic concurrency control?
Ответ
Pessimistic concurrency control — это стратегия, при которой транзакции блокируют ресурсы сразу при доступе к ним, чтобы предотвратить конфликты. Это снижает параллелизм, но гарантирует отсутствие коллизий.
Блокировки и конкурентность
Вопрос
Что такое блокировка в базе данных?
Ответ
Блокировка — это механизм, используемый СУБД для контроля одновременного доступа нескольких транзакций к одним и тем же данным. Блокировка предотвращает некорректные изменения и обеспечивает изоляцию.
Вопрос
Какие основные типы блокировок существуют?
Ответ
Основные типы блокировок:
- Shared (S) — разделяемая блокировка, разрешает чтение, но запрещает запись другим транзакциям.
- Exclusive (X) — исключительная блокировка, запрещает и чтение, и запись другим транзакциям.
- Update (U) — промежуточная блокировка, используемая перед обновлением, чтобы избежать взаимоблокировок.
- Intent — намеренная блокировка на уровне таблицы или страницы, сигнализирующая о наличии более мелких блокировок внутри.
Вопрос
Могут ли две транзакции удерживать shared-блокировки на одной строке одновременно?
Ответ
Да. Несколько транзакций могут одновременно удерживать shared-блокировки на одной строке, так как они только читают данные и не изменяют их.
Вопрос
Может ли транзакция с shared-блокировкой получить exclusive-блокировку на ту же строку?
Ответ
Нет. Пока на строке удерживается хотя бы одна shared-блокировка, exclusive-блокировка не может быть получена. Транзакция должна дождаться освобождения всех shared-блокировок.
Вопрос
Что такое гранулярность блокировки?
Ответ
Гранулярность блокировки — это уровень детализации, на котором применяется блокировка: строка, страница, таблица или даже вся база данных. Чем мельче гранулярность (например, строка), тем выше параллелизм.
Вопрос
Что такое таблица блокировок?
Ответ
Таблица блокировок — это внутренняя структура данных СУБД, в которой отслеживаются все активные блокировки: какие ресурсы заблокированы, какими транзакциями и какого типа.
Вопрос
Что такое взаимоблокировка (deadlock)?
Ответ
Взаимоблокировка — это ситуация, когда две или более транзакций взаимно ожидают освобождения ресурсов, удерживаемых друг другом, и ни одна не может продолжить выполнение.
Пример:
- Транзакция A блокирует строку 1 и пытается заблокировать строку 2.
- Транзакция B блокирует строку 2 и пытается заблокировать строку 1.
Обе ждут друг друга бесконечно.
Вопрос
Как СУБД обнаруживает взаимоблокировки?
Ответ
СУБД периодически анализирует граф ожиданий (wait-for graph), где узлы — транзакции, а рёбра — зависимости ожидания. Цикл в этом графе означает взаимоблокировку.
Вопрос
Как разрешается взаимоблокировка?
Ответ
СУБД выбирает одну из участвующих транзакций в качестве «жертвы» и откатывает её. Это освобождает ресурсы, позволяя другим транзакциям продолжить работу. Выбор жертвы основан на стоимости отката, времени выполнения или приоритете.
Вопрос
Что такое тайм-аут блокировки?
Ответ
Тайм-аут блокировки — это максимальное время, которое транзакция может ждать получения блокировки. Если за это время блокировка не освобождается, СУБД прерывает запрос с ошибкой.
Вопрос
Как избежать взаимоблокировок?
Ответ
Стратегии предотвращения взаимоблокировок:
- Доступ к ресурсам в одинаковом порядке во всех транзакциях.
- Минимизация длительности транзакций.
- Использование уровня изоляции
READ COMMITTEDвместо более строгих, если это допустимо. - Применение optimistic concurrency control.
Вопрос
Что такое эскалация блокировок?
Ответ
Эскалация блокировок — это процесс преобразования множества мелких блокировок (например, на строки) в одну крупную (например, на таблицу) для снижения накладных расходов на управление блокировками.
Вопрос
Когда происходит эскалация блокировок?
Ответ
Эскалация происходит, когда количество блокировок одного типа превышает порог, установленный СУБД (например, 5000 строк в SQL Server). Это зависит от настроек и объёма изменений.
Вопрос
Что такое livelock?
Ответ
Livelock — это ситуация, при которой транзакции постоянно меняют своё состояние в ответ на действия друг друга, но не могут продвинуться вперёд. В отличие от deadlock, процессы активны, но бесполезны.
Вопрос
Как СУБД предотвращает livelock?
Ответ
СУБД использует стратегии приоритизации и случайные задержки при повторных попытках получения блокировки, чтобы гарантировать, что хотя бы одна транзакция сможет завершиться.
Вопрос
Что такое read-ahead в контексте конкурентности?
Ответ
Read-ahead — это механизм предварительного чтения данных с диска в память, основанный на прогнозировании последовательного доступа. Он не связан напрямую с блокировками, но влияет на производительность при конкурентном чтении.
Вопрос
Может ли транзакция читать данные, которые она сама изменила, до COMMIT?
Ответ
Да. Транзакция всегда видит свои собственные изменения, независимо от уровня изоляции. Это обеспечивает внутреннюю согласованность.
Вопрос
Что такое snapshot isolation?
Ответ
Snapshot isolation — это уровень изоляции, при котором каждая транзакция работает с «снимком» базы данных на момент её начала. Это позволяет избежать грязного, неповторяющегося и фантомного чтения без использования блокировок чтения.
Вопрос
Как реализуется snapshot isolation?
Ответ
Snapshot isolation реализуется через многоверсионность (MVCC — Multi-Version Concurrency Control). Каждая строка хранит несколько версий с метками времени транзакций, и транзакция видит только те версии, которые были актуальны на момент её старта.
Вопрос
Поддерживает ли PostgreSQL snapshot isolation?
Ответ
Да. В PostgreSQL уровень изоляции REPEATABLE READ реализован через MVCC и фактически обеспечивает поведение, эквивалентное snapshot isolation, включая защиту от фантомного чтения.
Репликация и резервное копирование
Вопрос
Что такое репликация в контексте баз данных?
Ответ
Репликация — это процесс автоматического копирования и поддержания актуальности данных между несколькими узлами (серверами) базы данных. Цель репликации — повышение доступности, масштабируемости и отказоустойчивости.
Вопрос
Какие основные типы репликации существуют?
Ответ
Основные типы репликации:
- Мастер-слейв (leader-follower) — одна нода принимает запись, остальные копируют изменения.
- Мастер-мастер (multi-leader) — несколько нод принимают запись, изменения синхронизируются между ними.
- Пир-пир (peer-to-peer) — все ноды равноправны, каждая может читать и писать.
- Каскадная — слейвы могут сами быть мастерами для других слейвов.
Вопрос
Что такое синхронная репликация?
Ответ
Синхронная репликация означает, что транзакция считается завершённой только после подтверждения записи на всех репликах. Это гарантирует согласованность, но снижает производительность и доступность при сбое реплики.
Вопрос
Что такое асинхронная репликация?
Ответ
Асинхронная репликация позволяет мастеру фиксировать транзакцию сразу после локальной записи, не дожидаясь подтверждения от реплик. Это повышает производительность, но создаёт риск потери данных при сбое мастера.
Вопрос
Что такое лаг репликации?
Ответ
Лаг репликации — это задержка между моментом фиксации транзакции на мастере и её применением на слейве. Лаг измеряется в секундах или количестве неприменённых транзакций.
Вопрос
Как минимизировать лаг репликации?
Ответ
Для минимизации лага:
- Увеличивают пропускную способность сети между узлами.
- Оптимизируют запросы и индексы на репликах.
- Используют параллельное применение транзакций (если поддерживается).
- Избегают долгих транзакций на мастере.
Вопрос
Что такое резервное копирование (backup)?
Ответ
Резервное копирование — это создание копии данных и метаданных базы данных для последующего восстановления в случае потери или повреждения.
Вопрос
Какие типы резервного копирования существуют?
Ответ
Основные типы резервного копирования:
- Полное (full) — копия всей базы на момент времени.
- Инкрементальное (incremental) — копия только изменённых данных с момента последнего резервного копирования любого типа.
- Дифференциальное (differential) — копия изменённых данных с момента последнего полного резервного копирования.
Вопрос
Что такое точка восстановления (recovery point)?
Ответ
Точка восстановления — это конкретный момент времени, до которого можно восстановить базу данных. Она определяется наличием резервных копий и журналов транзакций.
Вопрос
Что такое журнал транзакций (transaction log)?
Ответ
Журнал транзакций — это файл, в который СУБД последовательно записывает все изменения данных. Он используется для обеспечения долговечности, восстановления после сбоев и поддержки репликации.
Вопрос
Как работает восстановление базы данных?
Ответ
Восстановление состоит из двух фаз:
- Redo (повтор) — применение всех зафиксированных транзакций из журнала после последней резервной копии.
- Undo (откат) — отмена всех незафиксированных транзакций на момент сбоя.
Вопрос
Что такое горячее резервное копирование?
Ответ
Горячее резервное копирование выполняется при работающей базе данных. Оно требует использования журналов транзакций для обеспечения согласованности копии.
Вопрос
Что такое холодное резервное копирование?
Ответ
Холодное резервное копирование выполняется при остановленной базе данных. Все файлы находятся в согласованном состоянии, дополнительные журналы не требуются.
Вопрос
Что такое PITR (Point-in-Time Recovery)?
Ответ
PITR — это возможность восстановить базу данных до любого момента времени в прошлом, используя полную резервную копию и последовательность журналов транзакций.
Вопрос
Как часто следует делать резервные копии?
Ответ
Частота зависит от допустимой потери данных (RPO — Recovery Point Objective):
- Критические системы: полная копия ежедневно, журналы — каждые 5–15 минут.
- Некритические: полная копия раз в неделю, инкрементальные — ежедневно.
Вопрос
Где хранить резервные копии?
Ответ
Резервные копии следует хранить:
- Вне основного сервера (на другом физическом устройстве).
- В географически удалённом месте (для защиты от локальных катастроф).
- С контролем целостности и шифрованием при необходимости.
Вопрос
Что такое RTO и RPO?
Ответ
- RTO (Recovery Time Objective) — максимально допустимое время простоя системы после сбоя.
- RPO (Recovery Point Objective) — максимально допустимый объём потерянных данных, измеряемый временем.
Вопрос
Можно ли использовать реплику как резервную копию?
Ответ
Нет. Реплика защищает от сбоев оборудования, но не от ошибок приложения или случайного удаления данных — такие изменения мгновенно распространяются на все реплики. Для защиты от логических ошибок необходимы именно резервные копии.
Вопрос
Что такое логическая и физическая резервная копия?
Ответ
- Физическая копия — побайтовое копирование файлов базы данных (например,
.mdf,.ibd). - Логическая копия — экспорт структуры и данных в виде SQL-скриптов (
CREATE TABLE,INSERT).
Вопрос
Как проверить работоспособность резервной копии?
Ответ
Работоспособность проверяют путём регулярного восстановления копии на тестовом сервере и выполнения проверочных запросов. Без тестового восстановления нельзя гарантировать успешность реального восстановления.
NoSQL и альтернативные модели
Вопрос
Что такое NoSQL-база данных?
Ответ
NoSQL-база данных — это система управления данными, не основанная на реляционной модели и не требующая фиксированной схемы. Она оптимизирована для масштабируемости, гибкости и работы с большими объёмами разнородных данных.
Вопрос
Какие основные типы NoSQL-баз данных существуют?
Ответ
Основные типы NoSQL-баз:
- Ключ-значение (например, Redis, DynamoDB)
- Документные (например, MongoDB, Couchbase)
- Колоночные (например, Cassandra, HBase)
- Графовые (например, Neo4j, Amazon Neptune)
Вопрос
Что такое CAP-теорема?
Ответ
CAP-теорема утверждает, что распределённая система может одновременно обеспечить не более двух из трёх свойств:
- Consistency (согласованность)
- Availability (доступность)
- Partition tolerance (устойчивость к сетевым разделениям)
Вопрос
Что означает согласованность в CAP-теореме?
Ответ
Согласованность в CAP означает, что любой запрос к любой реплике возвращает последнюю записанную версию данных. Все узлы видят одинаковое состояние в один и тот же момент времени.
Вопрос
Что означает доступность в CAP-теореме?
Ответ
Доступность означает, что каждый запрос к работающему узлу получает ответ, даже если часть системы недоступна. Система продолжает обслуживать запросы при любых отказах.
Вопрос
Что означает устойчивость к разделениям в CAP-теореме?
Ответ
Устойчивость к разделениям означает, что система продолжает работать корректно даже при разрыве связи между узлами (сетевом разделении). Это обязательное свойство для всех распределённых систем.
Вопрос
Можно ли обойти CAP-теорему?
Ответ
Нет. CAP-теорема — это фундаментальное ограничение распределённых систем. Разработчики выбирают компромисс между согласованностью и доступностью при наличии сетевых разделений.
Вопрос
Что такое BASE в контексте NoSQL?
Ответ
BASE — это альтернатива ACID, характерная для многих NoSQL-систем:
- Basically Available — система всегда отвечает, но не обязательно корректными данными.
- Soft state — состояние может меняться со временем даже без входящих запросов.
- Eventually consistent — система со временем достигнет согласованного состояния.
Вопрос
В чём преимущество документных баз данных?
Ответ
Документные базы хранят данные в гибком формате (например, JSON), позволяя изменять структуру от документа к документу. Это упрощает разработку приложений с быстро меняющимися требованиями.
Вопрос
Как устроена база данных типа «ключ-значение»?
Ответ
База данных «ключ-значение» хранит данные как пары: уникальный ключ и произвольное значение (часто бинарное или строковое). Операции ограничены GET, PUT, DELETE по ключу. Пример: Redis, Memcached.
Вопрос
Для чего используются колоночные базы данных?
Ответ
Колоночные базы оптимизированы для аналитических запросов, оперирующих агрегацией по столбцам. Они эффективно сжимают данные и минимизируют чтение с диска при работе с подмножеством атрибутов.
Вопрос
Что такое семейство столбцов в HBase?
Ответ
Семейство столбцов — это группа связанных столбцов, хранящихся вместе на диске. В HBase каждое семейство имеет собственные настройки сжатия, TTL и репликации.
Вопрос
Почему графовые базы эффективны для связанных данных?
Ответ
Графовые базы хранят данные как узлы, рёбра и свойства. Связи являются первоклассными объектами, что позволяет выполнять сложные обходы (например, «друзья друзей») за время, пропорциональное размеру результата, а не всей базе.
Вопрос
Поддерживают ли NoSQL-базы транзакции?
Ответ
Некоторые современные NoSQL-базы поддерживают транзакции, но с ограничениями:
- MongoDB поддерживает многострочные транзакции внутри одного шарда.
- Cassandra поддерживает линейно-изолированные операции на уровне партиции.
- Redis поддерживает транзакции через
MULTI/EXEC.
Вопрос
Что такое шардинг в NoSQL?
Ответ
Шардинг — это горизонтальное разделение данных на части (шарды), распределённые по разным узлам. Каждый шард отвечает за подмножество ключей, что обеспечивает масштабируемость записи и чтения.
Вопрос
Как выбирается ключ шардирования?
Ответ
Ключ шардирования должен:
- Обеспечивать равномерное распределение данных.
- Минимизировать необходимость межшардовых запросов.
- Соответствовать паттернам доступа приложения (например,
user_idдля пользовательских данных).
Вопрос
Что такое денормализация в NoSQL?
Ответ
Денормализация — это сознательное дублирование данных в документах или строках для устранения необходимости соединений. В NoSQL соединения неэффективны, поэтому данные проектируются под конкретные запросы.
Вопрос
Можно ли использовать SQL в NoSQL-базах?
Ответ
Некоторые NoSQL-базы предоставляют SQL-подобные языки:
- Cassandra использует CQL (Cassandra Query Language).
- Cosmos DB поддерживает SQL-подобный синтаксис для документных запросов.
- BigQuery (хотя и не классическая NoSQL) использует стандартный SQL для колоночных данных.
Вопрос
Когда стоит выбирать NoSQL вместо реляционной СУБД?
Ответ
NoSQL предпочтителен, когда:
- Требуется горизонтальное масштабирование.
- Схема данных часто меняется.
- Данные слабо структурированы или полуструктурированы.
- Приложение работает с очень высокой нагрузкой записи/чтения.
- Готовы пожертвовать строгой согласованностью ради доступности.
Вопрос
Как обеспечивается целостность данных в NoSQL?
Ответ
Целостность в NoSQL обеспечивается на уровне приложения:
- Валидация перед записью.
- Использование транзакций там, где они поддерживаются.
- Реализация бизнес-правил в коде.
- Применение идемпотентных операций для устойчивости к повторам.
Администрирование и мониторинг
Вопрос
Что входит в обязанности администратора баз данных (DBA)?
Ответ
Обязанности DBA включают:
- Установку и настройку СУБД.
- Создание и управление пользователями и привилегиями.
- Настройку резервного копирования и восстановления.
- Мониторинг производительности и устранение узких мест.
- Обновление СУБД и применение патчей.
- Обеспечение безопасности и аудита.
Вопрос
Какие метрики важны для мониторинга базы данных?
Ответ
Ключевые метрики:
- Использование CPU, памяти и диска.
- Количество активных соединений.
- Время выполнения медленных запросов.
- Размер и рост журналов транзакций.
- Уровень фрагментации индексов.
- Лаг репликации.
- Частота ошибок и блокировок.
Вопрос
Что такое медленный запрос (slow query)?
Ответ
Медленный запрос — это запрос, время выполнения которого превышает заданный порог (например, 1 секунда). Такие запросы регистрируются в логе медленных запросов для последующего анализа.
Вопрос
Как включить лог медленных запросов в MySQL?
Ответ
В MySQL лог медленных запросов включается параметром slow_query_log = ON в конфигурационном файле. Порог задаётся через long_query_time (в секундах).
Пример:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
Вопрос
Что такое connection pool?
Ответ
Connection pool — это механизм повторного использования установленных соединений с базой данных. Вместо создания нового соединения при каждом запросе приложение берёт готовое из пула, что снижает накладные расходы.
Вопрос
Почему важно ограничивать максимальное число соединений?
Ответ
Каждое соединение потребляет память и другие ресурсы СУБД. Превышение лимита может привести к отказу в обслуживании, замедлению всей системы или аварийному завершению процессов.
Вопрос
Что такое автовакуум в PostgreSQL?
Ответ
Автовакуум — это фоновый процесс в PostgreSQL, автоматически выполняющий операции VACUUM и ANALYZE. Он освобождает место от удалённых строк и обновляет статистику для оптимизатора запросов.
Вопрос
Зачем нужна команда ANALYZE?
Ответ
Команда ANALYZE собирает статистику по распределению значений в столбцах таблицы. Эта информация используется оптимизатором для выбора наиболее эффективного плана выполнения запросов.
Вопрос
Что такое checkpoint в СУБД?
Ответ
Checkpoint — это событие, при котором СУБД записывает все «грязные» страницы (изменённые в памяти) на диск и обновляет журнал транзакций. Это сокращает время восстановления после сбоя.
Вопрос
Как влияет частота checkpoint на производительность?
Ответ
Слишком частые checkpoint вызывают высокую нагрузку на диск из-за постоянной записи. Слишком редкие — увеличивают объём данных, которые нужно обработать при восстановлении. Баланс настраивается через параметры (checkpoint_timeout, max_wal_size и др.).
Вопрос
Что такое WAL (Write-Ahead Logging)?
Ответ
WAL — это принцип, согласно которому любое изменение данных сначала записывается в журнал (лог) на диск, и только потом применяется к самим данным. Это гарантирует долговечность и позволяет выполнять PITR.
Вопрос
Как проверить целостность базы данных?
Ответ
Целостность проверяют с помощью встроенных утилит:
- В PostgreSQL:
pg_checksums,pg_amcheck. - В SQL Server:
DBCC CHECKDB. - В MySQL:
mysqlcheck --check.
Вопрос
Что такое роль в СУБД?
Ответ
Роль — это именованная группа привилегий, которую можно назначать пользователям. Роли упрощают управление доступом: вместо выдачи прав каждому пользователю отдельно, права назначаются роли.
Вопрос
Как работает аудит в базе данных?
Ответ
Аудит — это регистрация действий пользователей: вход в систему, выполнение DDL/DML-запросов, попытки доступа к защищённым объектам. Журнал аудита используется для анализа инцидентов и соблюдения нормативных требований.
Вопрос
Что такое tablespace?
Ответ
Tablespace — это логическое хранилище, связывающее объекты базы данных (таблицы, индексы) с физическими файлами на диске. Он позволяет размещать данные на разных устройствах для управления производительностью и резервным копированием.
Вопрос
Как обновлять СУБД без простоя?
Ответ
Для обновления без простоя используют:
- Репликацию: обновляют слейвы по очереди, затем переключают мастер.
- Blue/Green-развёртывание: запускают новую версию параллельно, переключают трафик.
- Rolling update в кластерах (например, Patroni + PostgreSQL).
Вопрос
Что такое failover?
Ответ
Failover — это автоматический переход на резервный узел при отказе основного. Он обеспечивает непрерывность работы и минимизирует время простоя.
Вопрос
Что такое switchover?
Ответ
Switchover — это плановое переключение ролей между мастером и репликой, например, для обслуживания. В отличие от failover, он выполняется без потери данных и в контролируемой обстановке.
Вопрос
Как настроить оповещения о проблемах в базе данных?
Ответ
Оповещения настраивают через:
- Встроенные средства СУБД (например, SQL Server Agent).
- Системы мониторинга (Prometheus + exporters, Zabbix, Datadog).
- Кастомные скрипты, проверяющие метрики и отправляющие уведомления при превышении порогов.
Вопрос
Что такое SLA в контексте баз данных?
Ответ
SLA (Service Level Agreement) — это соглашение об уровне обслуживания, определяющее обязательства по доступности, времени отклика, RTO/RPO и другим показателям. Например: «99.95% uptime, RTO ≤ 15 минут».
Распределённые базы данных и архитектурные паттерны
Вопрос
Что такое распределённая база данных?
Ответ
Распределённая база данных — это система, в которой данные физически размещены на нескольких узлах, возможно, в разных локациях, но логически представляют собой единое целое. Узлы взаимодействуют через сеть для выполнения запросов и поддержания согласованности.
Вопрос
Что такое шардинг?
Ответ
Шардинг — это горизонтальное разделение таблицы на непересекающиеся подмножества строк (шарды), распределённые по разным узлам. Каждый шард отвечает за свой диапазон ключей или хэш-значений.
Вопрос
Какие стратегии шардинга существуют?
Ответ
Основные стратегии шардинга:
- Диапазонный шардинг — шарды содержат диапазоны значений ключа (например, ID от 1 до 10000).
- Хэш-шардинг — ключ хэшируется, и результат определяет шард. Обеспечивает равномерное распределение.
- Директорный шардинг — отдельный сервис (directory) хранит карту «ключ → шард».
Вопрос
Что такое координатор в распределённой СУБД?
Ответ
Координатор — это узел, принимающий клиентские запросы, разбивающий их на подзапросы к шардам, собирающий результаты и возвращающий итоговый ответ. Пример: Citus для PostgreSQL.
Вопрос
Что такое двухфазный коммит (2PC)?
Ответ
Двухфазный коммит — это протокол обеспечения атомарности транзакции в распределённой системе. Он состоит из двух этапов:
- Prepare — все участники голосуют «за» или «против» фиксации.
- Commit/Rollback — координатор принимает решение и рассылает его всем участникам.
Вопрос
Какие недостатки у двухфазного коммита?
Ответ
Недостатки 2PC:
- Блокировка ресурсов на время голосования.
- Уязвимость к отказу координатора (требуется журнал для восстановления).
- Высокая задержка из-за сетевых раундов.
- Низкая доступность при сетевых разделениях.
Вопрос
Что такое консенсус в распределённых системах?
Ответ
Консенсус — это процесс достижения согласия между несколькими узлами по поводу значения или порядка операций, даже при наличии сбоев. Примеры алгоритмов: Paxos, Raft, ZAB.
Вопрос
Как работает алгоритм Raft?
Ответ
Raft обеспечивает консенсус через выбор лидера. Лидер принимает все записи, реплицирует их на фолловеров и фиксирует после подтверждения большинством. При отказе лидера проводятся новые выборы.
Вопрос
Что такое кворум в распределённой базе?
Ответ
Кворум — это минимальное количество узлов, необходимое для принятия решения (например, запись или чтение). Обычно кворум = N/2 + 1 для нечётного числа узлов N.
Вопрос
Что такое read-after-write consistency?
Ответ
Read-after-write consistency гарантирует, что после успешной записи пользователь сразу увидит своё изменение при последующем чтении. Это требует направления чтения на мастер или использование временных меток.
Вопрос
Что такое causal consistency?
Ответ
Causal consistency обеспечивает, что если операция A причинно предшествует операции B, то все узлы будут видеть их в правильном порядке. Операции без причинной связи могут наблюдаться в любом порядке.
Вопрос
Что такое multi-region deployment?
Ответ
Multi-region deployment — это развёртывание базы данных в нескольких географических регионах для снижения задержки для пользователей и повышения отказоустойчивости при региональных сбоях.
Вопрос
Как обеспечить низкую задержку в multi-region системе?
Ответ
Стратегии:
- Чтение с ближайшей реплики.
- Использование активных мастеров в каждом регионе (multi-leader).
- Кэширование часто запрашиваемых данных.
- Применение eventual consistency там, где допустимо.
Вопрос
Что такое time-series база данных?
Ответ
Time-series база данных оптимизирована для хранения и анализа данных, привязанных ко времени (например, метрики, логи, события). Примеры: InfluxDB, TimescaleDB, Prometheus.
Вопрос
Почему обычные СУБД плохо подходят для time-series данных?
Ответ
Обычные СУБД не оптимизированы для:
- Высокой скорости вставки тысяч записей в секунду.
- Автоматического управления временными окнами (удаление старых данных).
- Эффективной агрегации по временным интервалам.
- Сжатия временных рядов.
Вопрос
Что такое материализованное представление?
Ответ
Материализованное представление — это сохранённый результат запроса, который периодически обновляется. Оно используется для ускорения сложных аналитических запросов за счёт предварительного вычисления.
Вопрос
Как выбрать архитектуру базы данных для микросервисов?
Ответ
В архитектуре микросервисов каждый сервис имеет свою собственную базу данных (database per service). Это обеспечивает независимость развёртывания, масштабирования и выбора технологии хранения.
Вопрос
Что такое polyglot persistence?
Ответ
Polyglot persistence — это подход, при котором в одном приложении используются разные типы баз данных (реляционные, документные, графовые и др.) в зависимости от задач каждого компонента.
Вопрос
Как обеспечить миграцию схемы в production без простоя?
Ответ
Стратегии безопасной миграции:
- Добавление новых столбцов как
NULLили со значением по умолчанию. - Разделение миграции на несколько этапов (например, сначала добавить столбец, потом заполнить, потом использовать).
- Использование обратно совместимого кода приложения.
- Применение инструментов вроде Flyway, Liquibase, или GitHub Actions с проверками.
Вопрос
Какие тренды наблюдаются в современных базах данных?
Ответ
Современные тренды:
- Гибридные модели (HTAP — гибрид OLTP и OLAP).
- Встроенный машинный анализ (ML в SQL).
- Serverless-архитектура (автомасштабирование, оплата по использованию).
- Унифицированные API (например, GraphQL поверх базы).
- Повышенный акцент на безопасность и compliance (шифрование, аудит, zero-trust).