Информация об изменениях

Сообщение Re: Базовый вопрос про добавление(вставку) данных в бд. от 04.07.2025 13:05

Изменено 04.07.2025 13:05 Qulac

Re: Базовый вопрос про добавление(вставку) данных в бд.
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте.


S>Тут на собеседовании спросили на тему когда считается, что данные добавлены в бд,

S>когда мы записали их в лог или непосредственно в файл данных? Ну типа когда бд вернет,
S>что данные добавлены, после добавления данных в лог или когда в сам файл данных будет комит?

S>Короче, вопрос про пайплайн добавления данных в базу:

S>1) Сначала фиксируем факт добавления данных в лог (durability). Как минимум это так при WAL.
S>Как без WAL я, кстати, с ходу не скажу.
S>2) Далее я должен эти данные валидировать на предмет всяческих ограничений и уникальности (в таблице).
S>3) Добавление данных в файл бд (commit), перестройка индексов и соотв. машинерия при необходимости.

S>Кажется, после шага 2 уже можно вернуть в запрос, что ок или не ок. Ждать шаг 3 уже не обязательно,

S>тут все можно сделать асинхронно.
S>Хоть это все сильно упрощенно, но отдаленно на реальность похоже? Или все не так, и я все перепутал.

S>Заранее благодарю.


S>Упд: 1 и 2 прекрасно параллелятся.


Тут ответ зависит от того, что предпримет база при перезапуске в случае сбоя между записью в лог и записью в файл, например при отключении питания. Если посмотрит лог, а потом добавит не записанные записи в файл, то запись в лог = записи в файл.
Re: Базовый вопрос про добавление(вставку) данных в бд.
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте.


S>Тут на собеседовании спросили на тему когда считается, что данные добавлены в бд,

S>когда мы записали их в лог или непосредственно в файл данных? Ну типа когда бд вернет,
S>что данные добавлены, после добавления данных в лог или когда в сам файл данных будет комит?

S>Короче, вопрос про пайплайн добавления данных в базу:

S>1) Сначала фиксируем факт добавления данных в лог (durability). Как минимум это так при WAL.
S>Как без WAL я, кстати, с ходу не скажу.
S>2) Далее я должен эти данные валидировать на предмет всяческих ограничений и уникальности (в таблице).
S>3) Добавление данных в файл бд (commit), перестройка индексов и соотв. машинерия при необходимости.

S>Кажется, после шага 2 уже можно вернуть в запрос, что ок или не ок. Ждать шаг 3 уже не обязательно,

S>тут все можно сделать асинхронно.
S>Хоть это все сильно упрощенно, но отдаленно на реальность похоже? Или все не так, и я все перепутал.

S>Заранее благодарю.


S>Упд: 1 и 2 прекрасно параллелятся.


Тут ответ зависит от того, что предпримет база при перезапуске в случае сбоя между записью в лог и записью в файл, например при отключении питания. Если посмотрит лог, а потом добавит не записанные записи в файл, то запись в лог = записи в файл, а так помимо просто записи есть еще и транзакции.