Персистентність

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Персистентність в програмуванні означає здатність стану існувати довше, ніж процес, що створив його. Без цієї можливості, стан може існувати лише в оперативній пам'яті і втрачається, коли оперативна пам'ять вимикається, наприклад, при вимкненні комп'ютера.

Це досягається шляхом зберігання стану як даних на пристрої тривалого зберігання, такому як жорсткий диск чи флеш-пам'ять.

Наприклад, графічні редактори чи текстові процесори досягають персистентності стану шляхом зберігання своїх документів у файл.

Ортогональна чи прозора персистентність[ред.ред. код]

Персистентність називається «ортогональною» чи «прозорою», якщо вона реалізована як внутрішня властивість середовища виконання програми. Середовище для ортогональної персистентності не потребує жодних спеціальних дій програм, що виконуються в ньому, для збереження чи відновлення свого стану.

Неортогональна персистентність потребує запису й читання даних на пристрої зберігання шляхом використання спеціальних інструкцій у програмі, для опису чого використовується допоміжне дієслово зберігати: При завершенні програма зберігає дані.

Перевага середовища ортогональної персистентності — простіші й менш схильні до помилок програми.

Способи реалізації персистентності[ред.ред. код]

Образи системи[ред.ред. код]

Використання образів системи — найпростіший спосіб реалізації персистентності. Сплячий режим ноутбука — приклад ортогональної персистентності з використанням образу системи, оскільки він не потребує ніяких дій програм, запущених на машині. Прикладом неортогональної персистентності з використанням образу системи є виконання редактором простого тексту специфічних інструкцій для збереження всього документу в файл.

Недоліки: Зміни стану, зроблені в системі після останнього збереження образу втрачаються в випадку збою чи вимкнення системи. Збереження образу після кожної невеликої зміни може стати занадто часоємним для більшості систем, тому образи не використовуються як метод простої персистентності для критичних систем.

Журнали[ред.ред. код]

Використання журналів — другий за простотою спосіб реалізації персистентності. Журналювання — процес збереження подій у лог перед застосуванням до системи. Такі логи називаються журналами.

На старті журнал читається, і кожна дія повторно застосовується до системи, що дозволяє уникнути втрати даних у випадку збою чи вимкнення.

Наприклад, уся історія скасування/повторення команд користувача у графічному редакторі при записі в файл утворює журнал, придатний для відновлення стану редагованого малюнка в будь-який момент часу.

Журнали використовуються журнальними файловими системами і СУБД, де вони також називаються логами транзакцій чи логами повторних дій.

Недоліки: Журнали часто поєднуються з іншими методиками персистентності, щоб уся (потенційно велика) історія всіх подій системи не потребувала повторного застосування при запуску системи.

Превалентність системи[ред.ред. код]

Превалентність системи (System prevalence) — методика, що поєднує системні образи й журнали транзакцій, розглянуті вище, щоб обійти їхні обмеження.

Недоліки: Превалентна система повинна мати достатньо оперативної пам'яті для розміщення всього стану системи.

«Брудний» запис[ред.ред. код]

«Брудний» запис полягає у записі на зовнішньому пристрої лише тих частин стану системи, що були змінені («забруднились») після свого останнього запису. Наприклад, складні програми редагування документів використовуватимуть «брудний» запис для збереження лише тих частин документа, що змінились після останнього збереження.

Недоліки: Ця техніка потребує перехоплення змін стану в межах програми. Це досягається непрозорим способом, що потребує спеціальних викликів API збереження, або прозорим способом з автоматичною трансформацією програми. В результаті, код стає повільнішим, ніж нативний код, і його важче відлагоджувати.

Рівні персистентності[ред.ред. код]

Будь-який рівень програмного забезпечення (software layer), що допомагає програмі зберегти стан, узагальнено називається рівнем персистентності. Більшість рівнів персистентності не досягають персистентності безпосередньо, а використовують основну СУБД.

СУБД[ред.ред. код]

СУБД використовують поєднання «брудного» запису й журналу транзакцій, розглянутих вище. Вони забезпечують не лише персистентність, а й інші послуги, такі як запити, ревізії й контроль доступу.

Персистентні операційні системи[ред.ред. код]

Персистентні ОС — операційні системи, що зберігають свій стан навіть після збою чи неочікуваного вимкнення. Комп'ютер лишається в тому ж стані, навіть якщо його вимкнути, подібно до телевізора чи якогось простого пристрою. До операційних систем, що забеспечують таку можливість, належать:

Див. також[ред.ред. код]