Сообщение 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 прекрасно параллелятся.
Тут ответ зависит от того, что предпримет база при перезапуске в случае сбоя между записью в лог и записью в файл, например при отключении питания. Если посмотрит лог, а потом добавит не записанные записи в файл, то запись в лог = записи в файл.
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 прекрасно параллелятся.
Тут ответ зависит от того, что предпримет база при перезапуске в случае сбоя между записью в лог и записью в файл, например при отключении питания. Если посмотрит лог, а потом добавит не записанные записи в файл, то запись в лог = записи в файл, а так помимо просто записи есть еще и транзакции.
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 прекрасно параллелятся.
Тут ответ зависит от того, что предпримет база при перезапуске в случае сбоя между записью в лог и записью в файл, например при отключении питания. Если посмотрит лог, а потом добавит не записанные записи в файл, то запись в лог = записи в файл, а так помимо просто записи есть еще и транзакции.