Персистентность в программировании означает способность состояния существовать дольше, чем процесс, создавший его. Без этой возможности, состояние может существовать только в оперативной памяти и теряется, когда оперативная память выключается, например, при выключении компьютера.
Это достигается путем хранения состояния как данных на устройстве длительного хранения, таком как жесткий диск или флэш-память.
Например, графические редакторы или текстовые процессоры достигают персистентности состояния путем хранения своих документов в файл.
Ортогональная или прозрачная персистентность
Персистентность называется «ортогональной» или «прозрачной», если она реализована как внутреннее свойство среды исполнения программы. Среда для ортогональной персистентности не требует никаких специальных действий программ, выполняемых в нем, для сохранения или восстановления своего состояния.
Неортогональных персистентность требует записи и чтения данных на устройства хранения путем использования специальных инструкций в программе, для описания чего используется вспомогательный глагол хранить : При завершении программа хранит данные.
Преимущество среды ортогональной персистентности - простые и менее подвержены ошибкам программы.
Способы реализации персистентности
Образы системы
Использование образов системы - самый простой способ реализации персистентности. Спящий режим ноутбука - пример ортогональной персистентности с использованием образа системы, поскольку он не требует никаких действий программ, запущенных на машине. Примером неортогональных персистентности с использованием образа системы является выполнение редактором простого текста специфических инструкций для сохранения всего документа в файл.
Недостатки : Изменения состояния, сделанные в системе после последнего сохранения образа теряются в случае сбоя или отключения системы. Сохранение образа после каждого небольшого изменения может стать слишком часоемним для большинства систем, поэтому обиды не используются как метод простой персистентности для критических систем.
Журналы
Использование журналов - второй по простоте способ реализации персистентности. Журналирование - процесс сохранения событий в лог перед применением к системе. Такие логи называются журналами.
На старте журнал читается, и каждое действие повторно применяется к системе, что позволяет избежать потери данных в случае сбоя или отключения.
Например, вся история отмены / повторения команд пользователя в графическом редакторе при записи в файл образует журнал, пригодный для восстановления состояния редактируемого рисунка в любой момент времени.
Журналы используются журнальными файловыми системами и СУБД, где они также называются логами транзакций или логами повторных действий.
Недостатки : Журналы часто сочетаются с другими методиками персистентности, чтобы вся (потенциально большая) история всех событий системы не требовала повторного применения при запуске системы.
Превалентность системы
Превалентнисть системы (System prevalence) - методика, сочетающая системные образы и журналы транзакций, рассмотренные выше, чтобы обойти их ограничения.
Недостатки: Превалентна система должна иметь достаточно оперативной памяти для размещения всего состояния системы.
«Грязная» запись
«Грязная» запись состоит в записи на внешнее устройство только тех частей состояния системы, которые были изменены («загрязнились») после своего последнего записи. Например, сложные программы редактирования документов использовать «грязный» запись для сохранения только тех частей документа, изменились после последнего сохранения.
Недостатки: Эта техника требует перехвата изменений состояния в рамках программы. Это достигается непрозрачным способом, что требует специальных вызовов API сохранения, или прозрачным способом с автоматической трансформацией программы. В результате, код становится более медленным, чем нативный код, и его труднее отлаживать.
Уровни персистентности
Любой уровень программного обеспечения (software layer), что помогает программе сохранить состояние, обобщенно называется уровнем персистентности. Большинство уровней персистентности не достигают персистентности непосредственно, а используют основную СУБД.
СУБД
СУБД используют сочетание «грязной» записи и журнала транзакций, рассмотренных выше. Они обеспечивают не только персистентность, но и другие услуги, такие как запросы, ревизии и контроль доступа.
Персистентные операционные системы
Персистентные ОС - операционные системы, сохраняющие свое состояние даже после сбоя или неожиданного отключения. Компьютер остается в том же состоянии, даже если его отключить, подобно телевизора или какого простого устройства. К операционным системам, которые обеспечивают такую возможность, относятся:
- CapROS, переработка EROS
- Coyotos, потомок EROS
- EROS, потомок KeyKOS
- KeyKOS
- Multics с одноуровневым хранилищем single-level store
- Phantom