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

Дельта-запись

Дельта-запись (англ. delta recording) — это метод хранения или передачи данных, при котором фиксируются только изменения (дельта) по сравнению с предыдущим состоянием, а не полная копия объекта. Данный подход применяется в системах резервного копирования, управления версиями, синхронизации файлов, базах данных и видеонаблюдении для сокращения объёмов хранимой информации и уменьшения нагрузки на каналы связи.

История

Концепция дельта-записи восходит к ранним разработкам в области теории информации и систем управления версиями. В 1970-х годах, с развитием компьютерных сетей и необходимостью экономии дискового пространства, появились первые алгоритмы, позволяющие сравнивать файлы и сохранять только различия. Одним из ранних примеров является утилита diff в UNIX, созданная в 1974 году Дугласом Макилроем, которая выводит построчные различия между текстовыми файлами.

В 1980-х годах метод начал применяться в системах резервного копирования (например, в продуктах компании IBM). С развитием интернета и облачных технологий в 2000-х годах дельта-запись стала ключевым механизмом для синхронизации данных между устройствами и серверами, особенно в сервисах облачного хранения (Dropbox, Google Drive, Яндекс.Диск) и системах контроля версий (Git, Subversion).

Принцип работы

Основная идея дельта-записи заключается в том, что вместо полного сохранения объекта (файла, блока данных, кадра видео) при каждом изменении система хранит исходную версию (базовый образ) и последовательность дельт — записей о внесённых изменениях. При необходимости восстановления текущего состояния система последовательно применяет дельты к базовому образу.

Алгоритм дельта-записи включает несколько этапов:

  1. Разбиение на блоки — исходные данные делятся на блоки фиксированного или переменного размера.
  2. Вычисление контрольных сумм — для каждого блока вычисляется хеш (например, MD5, SHA-1 или CRC32).
  3. Сравнение — система сравнивает хеши блоков текущей версии с хешами блоков предыдущей версии.
  4. Формирование дельты — создаётся запись, содержащая только те блоки, которые изменились, а также инструкции по их вставке, удалению или замене.

Классификация

По типу хранимых изменений

  • Инкрементальная дельта-запись — сохраняются изменения относительно последней версии (полной или предыдущей дельты). Требует последовательного применения всех дельт для восстановления.
  • Дифференциальная дельта-запись — сохраняются изменения относительно последней полной копии. Восстановление требует только базового образа и последней дифференциальной дельты.

По области применения

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