Персистентность в информатике¶
Персистентность (от англ. persistent — «постоянный, устойчивый») — свойство данных, объектов или состояний сохраняться после завершения процесса, программы или сеанса работы, а также способность системы восстанавливать ранее сохранённую информацию. Термин широко применяется в информатике, программной инженерии, базах данных и теории вычислимости.
¶Персистентность данных и программ
В программировании персистентность означает, что данные переживают процесс, создавший их. Переменные в оперативной памяти существуют только во время работы программы и исчезают при её завершении — такие данные называют эфемерными. Для хранения персистентных данных используются файловые системы, базы данных, объектные хранилища и специализированные библиотеки сериализации.
Простейший пример персистентности — запись файла на диск: данные остаются доступными после закрытия программы и перезагрузки компьютера. Более сложные системы (реляционные базы данных, NoSQL-хранилища) обеспечивают персистентность с гарантиями целостности, транзакционности и отказоустойчивости.
¶Персистентные структуры данных
В теории алгоритмов персистентные структуры данных — это структуры, которые сохраняют предыдущие версии себя при модификации. Различают:
- Полностью персистентные структуры — допускают обращение ко всем предыдущим версиям.
- Частично персистентные — допускают обращение только к последней версии и ко всем предыдущим.
- Конечно персистентные — допускают обращение только к двум последним версиям.
Персистентные деревья (например, персистентные версии красно-чёрных деревьев и сбалансированных деревьев поиска) строятся на основе копирования пути: при каждом изменении создаётся копия только узлов, лежащих на пути от изменяемого элемента к корню. Это позволяет хранить все версии структуры за время и память, пропорциональные логарифму от общего числа операций.
Персистентные структуры данных применяются в системах контроля версий, в базах данных с временной разрешённостью (temporal databases), в функциональном программировании (где неизменяемые структуры по умолчанию персистентны) и в вычислительной геометрии.
¶Персистентность в объектно-ориентированном программировании
В объектно-ориентированном программировании персистентность объекта — способность объекта сохранять своё состояние за пределами времени жизни программы. Для реализации персистентности объектов используются:
- Сериализация — преобразование объекта в форму, пригодную для хранения (байты, XML, JSON), и обратное восстановление.
- ORM (Object-Relational Mapping) — отображение объектов на таблицы реляционных баз данных (Hibernate, SQLAlchemy, Entity Framework).
- Персистентные фреймворки — системы прозрачного сохранения объектов без явного кода сериализации.
Термин «персистентный объект» вводил в оборот Джим Грей (Jim Gray) в контексте работы с базами данных в конце 1970-х годов.
¶Персистентность памяти (NVM)
С развитием технологий энергонезависимой памяти (non-volatile memory, NVM) термин приобрёл новое значение на аппаратном уровне. Технологии Intel Optane (3D XPoint), PCM (phase-change memory), MRAM и STT-MRAM позволяют хранить данные без подачи электропитания, совмещая скорость оперативной памяти с персистентностью дискового хранилища.
Для работы с персистентной памятью разработаны программные интерфейсы: NVM-файловые системы (NOVA, PMFS), библиотеки памяти (PMDK — Persistent Memory Development Kit) и модели программирования, где указатели в персистентной памяти остаются валидными после перезагрузки.
¶Персистентность в теории вычислимости
В теории вычислимости машина Тьюринга с персистентной лентой — модель вычислителя, лента которого сохраняет записанные данные после остановки машины. Персистентная лента используется при изучении оракулов, сверхвычислимости и вычислительных моделей с внешней памятью.
¶Персистентные соединения и сессии
В сетевых технологиях и веб-разработке персистентное соединение (keep-alive) — TCP-соединение, которое переиспользуется для нескольких последовательных HTTP-запросов вместо создания нового на каждый запрос. Это снижает накладные расходы на установление соединения и ускоряет загрузку страниц.
В контексте веб-сессий персистентность проявляется через cookie-файлы, локальное хранилище браузера (localStorage, sessionStorage) и токены, которые сохраняют состояние пользователя между запросами и сеансами.
¶Персистентность в медицине и психологии
Вне информатики термин «персистирующий» (persistent) употребляется в медицине для обозначения состояний, симптомов или возбудителей, которые сохраняются длительное время, несмотря на лечение: персистирующая инфекция (вирус гепатита B, ВИЧ), персистирующее бессонническое расстройство, персистирующее генитальное раздражение (PGAD).
В психологии персистентность — устойчивость установок, стереотипов поведения или эмоциональных состояний, сохраняющихся при смене ситуации.
¶См. также
- Эфемерность
- Сериализация (информатика)
- Временная база данных
- Энергонезависимая память
¶Источники
- Cormen T. H., Leiserson C. E., Rivest R. L., Stein C. — «Introduction to Algorithms» (главы о персистентных структурах данных).
- Date C. J. — «An Introduction to Database Systems».
- Intel Corporation — «Persistent Memory Programming», PMDK documentation.
- Driscoll J. R., Sarnak N., Sleator D. D., Tarjan R. E. — «Making Data Structures Persistent», Journal of Computer and System Sciences, 1989.
