digital-garden/dev/database/Журнал БД.md

53 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
tags:
- maturity/🌱
date: 2024-05-26
zero-link:
- "[[../../meta/zero/00 Реляционная база данных]]"
parents:
linked:
---
Журнал базы данных — это структура, в которой фиксируются все изменения, происходящие в базе данных, до их окончательного применения. Основная цель журнала — обеспечить надежность и консистентность данных. Это позволяет выполнять [[Транзакция БД|транзакции]] и [[../architecture/highload/Репликация БД|репликацию БД]].
Перед выполнением SQL-запроса база данных сначала записывает в журнал информацию о планируемых действиях, например: "Обновить значение колонки `amount` в таблице `orders` для записи с `id = 5`". После фиксации записи в журнале база данных изменяет данные в памяти, чтобы ускорить обработку операций, а затем, с некоторой задержкой, записывает их на диск в основное хранилище. Этот подход улучшает производительность за счет уменьшения количества операций записи на диск, которые являются более медленными по сравнению с изменениями в памяти. В случае сбоя системы до записи данных на диск, изменения можно восстановить из журнала. Этот алгоритм называется [[../../../../_inbox/Point In Time Recovery (PITR)|PITR]] (Point In Time Recovery).
![](Pasted%20image%2020240528081137.png)
Этот процесс обеспечивает два важных аспекта:
- **Надежность**: В случае сбоя системы данные можно восстановить из журнала до последнего зафиксированного состояния.
- **Консистентность**: Все транзакции, записанные в журнал, будут применены в базе данных в правильном порядке, что предотвращает потерю данных и сохраняет целостность системы.
**Недостатки**:
- Увеличение времени записи: каждая транзакция требует предварительной записи в журнал, что может замедлить выполнение операций.
- Потребление дискового пространства: журналы могут занимать значительное место, особенно в системах с высокой активностью.
> [!INFO]
> Журналы базы данных часто имеют циклическую структуру, где новые данные записываются поверх старых, когда журнал заполняется. Это позволяет эффективно использовать дисковое пространство и упрощает управление журналом.
Реализации в СуБД:
- [[postgresql/Write-Ahead Log|Журнал в PostgreSQL]]
- [Журналы в MySQL](mysql/Журналы%20в%20MySQL.md)
Главные вопросы, которые встают перед разработчиком любой БД:
- Как организовать журнал?
- Как его писать?
- Как писать его меньше?
- Как сделать так, чтобы это работало быстрее?
- При чем тут репликация?
Для повышения производительности рекомендуется выделять отдельные жесткие диски под журналы, чтобы у них был эксклюзивный доступ к ресурсам диска. Это менее актуально для SSD, так как у них значительно выше скорость чтения и записи, а также отсутствует проблема механического доступа, что делает их более эффективными для параллельной работы с данными.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Реляционная база данных|00 Реляционная база данных]]
**Родитель**::
**Источник**::
**Автор**::
**Создана**:: [[2024-05-26]]
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
<!-- SerializedQuery: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
- [[Write-Ahead Log]]
<!-- SerializedQuery END -->