Открыть сервисСервис

Персистентность в информатике

Персистентность (от англ. 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.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru