Дельта-запись¶
Дельта-запись (англ. delta recording) — это метод хранения или передачи данных, при котором фиксируются только изменения (дельта) по сравнению с предыдущим состоянием, а не полная копия объекта. Данный подход применяется в системах резервного копирования, управления версиями, синхронизации файлов, базах данных и видеонаблюдении для сокращения объёмов хранимой информации и уменьшения нагрузки на каналы связи.
¶История
Концепция дельта-записи восходит к ранним разработкам в области теории информации и систем управления версиями. В 1970-х годах, с развитием компьютерных сетей и необходимостью экономии дискового пространства, появились первые алгоритмы, позволяющие сравнивать файлы и сохранять только различия. Одним из ранних примеров является утилита diff в UNIX, созданная в 1974 году Дугласом Макилроем, которая выводит построчные различия между текстовыми файлами.
В 1980-х годах метод начал применяться в системах резервного копирования (например, в продуктах компании IBM). С развитием интернета и облачных технологий в 2000-х годах дельта-запись стала ключевым механизмом для синхронизации данных между устройствами и серверами, особенно в сервисах облачного хранения (Dropbox, Google Drive, Яндекс.Диск) и системах контроля версий (Git, Subversion).
¶Принцип работы
Основная идея дельта-записи заключается в том, что вместо полного сохранения объекта (файла, блока данных, кадра видео) при каждом изменении система хранит исходную версию (базовый образ) и последовательность дельт — записей о внесённых изменениях. При необходимости восстановления текущего состояния система последовательно применяет дельты к базовому образу.
Алгоритм дельта-записи включает несколько этапов:
- Разбиение на блоки — исходные данные делятся на блоки фиксированного или переменного размера.
- Вычисление контрольных сумм — для каждого блока вычисляется хеш (например, MD5, SHA-1 или CRC32).
- Сравнение — система сравнивает хеши блоков текущей версии с хешами блоков предыдущей версии.
- Формирование дельты — создаётся запись, содержащая только те блоки, которые изменились, а также инструкции по их вставке, удалению или замене.
¶Классификация
¶По типу хранимых изменений
- Инкрементальная дельта-запись — сохраняются изменения относительно последней версии (полной или предыдущей дельты). Требует последовательного применения всех дельт для восстановления.
- Дифференциальная дельта-запись — сохраняются изменения относительно последней полной копии. Восстановление требует только базового образа и последней дифференциальной дельты.
¶По области применения
- Файловая дельта-запись — применяется к отдельным файлам. Используется в системах управления версиями (Git, Mercurial) и утилитах синхронизации (rsync, DeltaCopy).
- Блочная дельта-запись — работает на уровне блоков данных (например, в системах резервного копирования дисков или виртуальных машин). Примеры: Veeam Backup & Replication, Acronis True Image.
- Дельта-запись в базах данных — фиксирует изменения строк, таблиц или транзакций. Используется в репликации (MySQL binlog, PostgreSQL WAL) и системах Change Data Capture (CDC).
- Дельта-запись в видео — применяется в видеокодеках (например, H.264, H.265) для сжатия видеопотока: сохраняются только различия между кадрами (P-кадры и B-кадры), а не полные кадры (I-кадры).
¶Применение
¶Резервное копирование
Дельта-запись является основой современных систем резервного копирования. Вместо создания полных копий каждый раз (что требует больших объёмов дискового пространства) системы выполняют:
- Полное резервное копирование (full backup) — создаётся раз в определённый период.
- Инкрементальное резервное копирование (incremental backup) — сохраняются изменения с момента последнего любого копирования.
- Дифференциальное резервное копирование (differential backup) — сохраняются изменения с момента последнего полного копирования.
Пример: в продукте Acronis True Image используется технология дельта-записи для создания резервных копий операционной системы. При последующих копированиях сохраняются только изменённые блоки данных, что сокращает время и объём хранилища.
¶Управление версиями
В системах контроля версий (Git, Subversion, Mercurial) дельта-запись позволяет хранить историю изменений файлов без дублирования полных копий каждой версии. Git, например, использует дельта-сжатие для упаковки объектов в файлы .pack, где хранятся только различия между версиями.
¶Синхронизация файлов
Утилита rsync (Linux, macOS, Windows) применяет алгоритм дельта-записи для синхронизации файлов по сети. При передаче файла rsync вычисляет контрольные суммы блоков на стороне получателя и сравнивает их с блоками на стороне отправителя. Передаются только те блоки, которые различаются, что значительно снижает трафик.
¶Облачные сервисы
Сервисы облачного хранения (Яндекс.Диск, Google Drive, Dropbox) используют дельта-запись для синхронизации изменений между устройствами. При редактировании файла на одном устройстве в облако передаётся только изменённая часть, а не весь файл.
¶Базы данных
В реляционных базах данных дельта-запись применяется для репликации и восстановления. Например, в PostgreSQL механизм Write-Ahead Logging (WAL) записывает изменения в журнал, который затем передаётся на реплики. В MySQL бинарный лог (binlog) содержит записи о всех изменениях данных, что позволяет восстанавливать базу данных на определённый момент времени.
¶Видеонаблюдение и видеокодеки
В системах видеонаблюдения дельта-запись используется для сжатия видеопотока. Кодеки H.264 и H.265 сохраняют полные кадры (I-кадры) с определённым интервалом, а между ними — только изменения (P-кадры и B-кадры). Это позволяет сократить объём видеоданных в 10–50 раз по сравнению с хранением каждого кадра в полном качестве.
¶Преимущества и недостатки
¶Преимущества
- Экономия дискового пространства — объём хранимых данных значительно меньше по сравнению с полными копиями.
- Снижение сетевого трафика — при передаче данных по сети передаются только изменения, что ускоряет синхронизацию и уменьшает нагрузку.
- Ускорение резервного копирования — инкрементальные и дифференциальные копии создаются быстрее полных.
- Возможность точечного восстановления — можно восстановить состояние на любой момент времени, если хранится цепочка дельт.
¶Недостатки
- Сложность восстановления — при длинной цепочке дельт восстановление может занимать больше времени, чем из полной копии, так как требуется последовательное применение всех изменений.
- Риск потери данных — повреждение одной дельты может сделать недоступными все последующие версии.
- Повышенная нагрузка на процессор — вычисление контрольных сумм и сравнение блоков требует вычислительных ресурсов.
- Фрагментация — при частых изменениях небольших файлов или блоков может возникать фрагментация данных на диске.
¶Примеры реализации
- Git — распределённая система контроля версий, использующая дельта-сжатие для упаковки объектов.
- rsync — утилита для синхронизации файлов, реализующая алгоритм дельта-записи (алгоритм Rolling Checksum).
- Veeam Backup & Replication — система резервного копирования виртуальных машин, использующая блочную дельта-запись.
- ZFS — файловая система с поддержкой дельта-записи на уровне копирования при записи (copy-on-write).
- H.264/H.265 — видеокодеки, применяющие дельта-запись между кадрами.
¶См. также
- Инкрементальное резервное копирование
- Дифференциальное резервное копирование
- Синхронизация файлов
- Управление версиями
- Сжатие данных
¶Источники
- Таненбаум Э., Бос Х. Современные операционные системы. — 4-е изд. — СПб.: Питер, 2015.
- Керниган Б., Пайк Р. UNIX. Программное окружение. — М.: ДМК Пресс, 2015.
- Документация Git: Git Internals — Packfiles. — Git-scm.com.
- RFC 3383 — The rsync Algorithm. — IETF, 2002.
- Документация PostgreSQL: Write-Ahead Logging (WAL). — PostgreSQL Global Development Group.
- Документация MySQL: Binary Log. — Oracle Corporation.
