Существуют различные способы определения транзакций и существуют различные способы их реализации.Общим свойством транзакции является то, что она КИСЛОТА:
- Атомность - все или ничего.Все задачи транзакции базы данных должны быть выполнены;Если по какой-либо причине причина неполная, транзакция базы данных должна быть прервана.
- Согласованность - сериализуемость и целостность.База данных должна находиться в согласованном или легальном состоянии до и после транзакции базы данных.Это означает, что транзакция базы данных не должна нарушать ограничения целостности базы данных.
- Изоляция Данные, используемые во время выполнения транзакции базы данных, не должны использоваться другой транзакцией базы данных, пока выполнение не будет завершено.Следовательно, частичные результаты незавершенной транзакции не должны использоваться для других транзакций, пока транзакция не будет успешно зафиксирована.Это также означает, что на выполнение транзакции не влияют операции базы данных других параллельных транзакций.
- Долговечность Все модификации базы данных транзакции будут выполнены постоянными, даже если сбой системы произойдет после завершения транзакции.
Транзакция может иметь несколько состояний:
- Активное состояние : она делится на две фазы.Начальная фаза: транзакция базы данных находится в этой фазе, в то время как ее операторы начинают выполняться.Этап частичной фиксации: транзакция базы данных вступает в эту фазу, когда выполняется ее последняя инструкция.На этом этапе транзакция базы данных завершила свое выполнение, но транзакция все еще может быть прервана, поскольку выходные данные выполнения могут временно находиться в основной памяти - событие, такое как аппаратный сбой, может стереть вывод.
- Failed State : транзакция базы данных переходит в сбойное состояние, когда ее нормальное выполнение больше не может продолжаться из-за аппаратных или программных ошибок).
- Aborted State :Транзакция базы данных, если СУБД определила ее как неудачную, переходит в прерванное состояние.Прерванная транзакция не должна влиять на базу данных, и поэтому любые изменения, внесенные в базу данных, должны быть отменены или в техническом плане отменены.База данных вернется в свое согласованное состояние после отмены прерванной транзакции.Схема восстановления СУБД отвечает за управление прерываниями транзакций.
- Состояние фиксации : Транзакция базы данных переходит в состояние фиксации, когда на диск после успешного выполнения было записано достаточно информации.В этом состоянии на диск было записано так много информации, что эффекты, вызванные транзакцией, не могут быть отменены путем прерывания;даже когда происходит системный сбой, изменения, сделанные совершенной транзакцией, могут быть воссозданы при перезапуске системы.
LevelDB не поддерживает транзакции , однако он имеет некоторые свойства ACID:
- Пакетные записи являются атомарными.
- Согласованность зависит от вас.
- Ограниченная поддержка изоляции.
- Долговечность - настраиваемый параметр.
Итак ... вернемся к вашемувопрос:
Q:
Что должен сделать этот слой, чтобы добавить поддержку транзакций в библиотеку более низкого уровня, которая не поддерживает транзакции?
A: Это зависит от того, как вы определяете транзакцию.Если вы определяете транзакцию с вышеупомянутыми свойствами и хотите, чтобы ваши транзакции были ACID, вам нужно было бы выяснить, возможно ли это с помощью LevelDB (большинство свойств ACID интегрированы), а затем вам придетсянаписать обертку вокруг LevelDB, которая гарантирует, что состояния транзакций поддерживаются должным образом.Однако я не совсем уверен, что это сделает только обертка, поэтому вам, возможно, придется взять исходный код и изменить его на истинно транзакций поддержки.