Ответ 1
Я думаю, что лучше перефразировать:
Почему новый распределенный VoltDB использует журнал команд для журнала записи вперед?
Сделайте эксперимент и представьте, что вы собираетесь написать свою собственную реализацию хранилища/базы данных. Несомненно, вы достаточно продвинуты, чтобы абстрагировать файловую систему и использовать хранилище блоков вместе с некоторыми дополнительными оптимизациями.
Некоторая базовая терминология:
- Состояние: сохраненная информация в данный момент времени
- Команда: директива для хранилища изменить его состояние
Таким образом, ваша база данных может выглядеть следующим образом:
Следующий шаг - выполнить некоторую команду:
Обратите внимание на несколько важных аспектов:
- Команда может влиять на многие сохраненные объекты, поэтому многие блоки станут грязными.
- Следующее состояние - это функция текущего состояния и команды
Некоторые промежуточные состояния могут быть пропущены, потому что для этого достаточно иметь цепочку команд.
Наконец, вам необходимо гарантировать целостность данных.
- Запись на запись вперед. Центральная концепция заключается в том, что изменения Состояние должны регистрироваться до любого тяжелого обновления в постоянном хранилище. Следуя нашей идее, мы можем регистрировать инкрементные изменения для каждого блока.
- Журнал команд - центральная концепция заключается в том, чтобы регистрировать только Command, которая используется для создания состояния.
Существуют плюсы и минусы для обоих подходов. Журнал Write-Ahead содержит все измененные данные, командный журнал требует дополнительной обработки, но быстрый и легкий.
VoltDB: ведение журнала и восстановление команд
Ключом к ведению журнала команд является то, что он регистрирует вызовы, а не последствия, транзакций. Записывая только вызов, журналы команд сохраняются до минимума, ограничивая влияние дискового ввода-вывода на есть на производительность.
Дополнительные примечания
SQLite: запись в записи вперед
Традиционный журнал отката работает, написав копию исходный неизменный контент базы данных в отдельный журнал отката и затем записывать изменения непосредственно в файл базы данных.
COMMIT происходит, когда добавляется специальная запись с указанием фиксации к WAL. Таким образом, COMMIT может произойти без записи в оригинальной базы данных, которая позволяет читателям продолжать работу с оригинальная неизмененная база данных, в то время как изменения одновременно переданы в WAL.
PostgreSQL: запись на запись вперед (WAL)
Использование WAL приводит к значительному сокращению числа записей на диске, потому что только файл журнала должен быть сброшен на диск, чтобы гарантировать что транзакция совершена, а не каждый файл данных изменен по сделке.
Файл журнала записывается последовательно, и поэтому стоимость синхронизации журнала намного меньше, чем затраты на очистку страницы данных. Это особенно справедливо для серверов, обслуживающих многие небольшие транзакции касаются разных частей хранилища данных. Более того, когда сервер обрабатывает множество небольших параллельных транзакций, один fsync файла журнала может быть достаточным для совершения многих транзакций.
Заключение
Ведение журнала команд:
- быстрее
- имеет более низкий размер
- имеет более тяжелую процедуру "Повтор".
- требуется частый снимок
Write Ahead Logging - это метод обеспечения атомарности. Лучшая производительность ведения журнала команд также должна улучшить обработку транзакций. Базы данных на 1 фут
Подтверждение
Блог VoltDB: введение в ведение журнала VoltDB
Одним из преимуществ ведения журнала команд по протоколу стиля ARIES является то, что транзакция может быть зарегистрирована до начала выполнения, а не выполнения транзакция и ожидание вывода данных журнала на диск. Другая Преимуществом является то, что пропускная способность ввода-вывода, необходимая для командного журнала, ограниченный сетью, используемой для передачи команд, и, в случае Gig-E, эта пропускная способность может быть удовлетворена дешевыми товарными дисками.
Важно помнить, что VoltDB распространяется по своей природе. Таким образом, транзакции немного сложны в управлении, и влияние производительности заметно.
Блог VoltDB: новая функция ведения журнала VoltDBs
Журнал команд в VoltDB состоит из хранимых процедур invocations и их параметров. Журнал создается на каждом node, и каждый журнал реплицируется, потому что вся работа реплицируется на несколько узлов. Эта приводит к реплицированному командному журналу, который можно обнулить при воспроизведении время. Поскольку транзакции VoltDB строго упорядочены, команда Журнал также содержит информацию о заказе. Таким образом, воспроизведение может произойти в том порядке, в котором выполнялись оригинальные транзакции, с полным транзакционная изоляция VoltDB. Поскольку сами вызовы часто меньше, чем измененные данные, и могут быть зарегистрированы до они привержены, этот подход оказывает очень скромное влияние на представление. Это означает, что пользователи VoltDB могут показатели стратосферы, с дополнительной долговечностью гарантии.