cdcdb/README.ru.md

5.5 KiB
Raw Blame History

cdcdb

Библиотека для хранения и управления снимками текстовых данных в базе SQLite. Использует механизм content-defined chunking (CDC) на основе алгоритма FastCDC для разделения данных на чанки переменного размера, что обеспечивает эффективную дедупликацию. Поддерживает опциональную компрессию Zstd, транзакции и проверку целостности данных через SHA-256. Основное применение — резервное копирование и версионирование текстовых файлов с минимизацией занимаемого пространства.

Алгоритм FastCDC

FastCDC — это алгоритм разделения данных на чанки переменного размера, основанный на хэшировании содержимого. Он использует таблицу Gear для вычисления "отпечатков" данных, определяя точки разделения с учетом минимального, целевого и максимального размеров чанка. Это позволяет эффективно выявлять изменения в данных и хранить только уникальные чанки, снижая объем хранилища.

Основные классы

Storage

Класс для работы с базой SQLite и управления снимками.

  • Конструктор: Инициализирует подключение к базе SQLite.
  • Методы:
    • newSnapshot: Создает снимок данных. Возвращает объект Snapshot или null, если данные совпадают с последним снимком.
    • getSnapshots: Получает список снимков (все или по метке). Возвращает массив объектов Snapshot.
    • getSnapshot: Получает снимок по ID. Возвращает объект Snapshot.
    • setupCDC: Настраивает параметры разделения данных CDC. Ничего не возвращает.
    • removeSnapshots: Удаляет снимки по метке, ID или объекту Snapshot. Возвращает количество удаленных снимков (для метки) или true/false (для ID или объекта).
    • getVersion: Возвращает строку с версией библиотеки.

Snapshot

Класс для работы с отдельным снимком данных.

  • Конструктор: Создает объект снимка для работы с данными по его ID.

  • Методы:

    • data: Извлекает полные данные снимка. Возвращает массив байтов (ubyte[]).
    • data: Извлекает данные снимка потоково через делегат. Ничего не возвращает.
    • remove: Удаляет снимок из базы. Возвращает true при успешном удалении, иначе false.
  • Свойства:

    • id: ID снимка (long).
    • label: Метка снимка (string).
    • created: Временная метка создания (UTC, DateTime).
    • length: Длина исходных данных (long).
    • sha256: Хэш SHA-256 данных (ubyte[32]).
    • status: Статус снимка ("pending" или "ready").
    • description: Описание снимка (string).

Пример использования

import cdcdb;

import std.stdio : writeln, File;
import std.file : exists, remove;

void main()
{
	// Создаем базу
	string dbPath = "example.db";

	// Инициализация Storage с компрессией Zstd
	auto storage = new Storage(dbPath, true, 22);

	// Создание снимка
	ubyte[] data = cast(ubyte[]) "Hello, cdcdb!".dup;
	auto snap = storage.newSnapshot("example_file", data, "Версия 1.0");
	if (snap)
	{
		writeln("Создан снимок: ID=", snap.id, ", Метка=", snap.label);
	}

	// Восстановление данных
	auto snapshots = storage.getSnapshots("example_file");
	if (snapshots.length > 0)
	{
		auto lastSnap = snapshots[0];
		File outFile = File("restored.txt", "wb");
		lastSnap.data((const(ubyte)[] chunk) => outFile.rawWrite(chunk));
		outFile.close();
		writeln("Данные восстановлены в restored.txt");
	}

	// Удаление снимков
	long deleted = storage.removeSnapshots("example_file");
	writeln("Удалено снимков: ", deleted);
}

Инструменты

В директории tools находится скрипт на D для создания таблицы Gear, используемой в алгоритме FastCDC. Он позволяет генерировать пользовательские таблицы хэшей для настройки разделения данных. Для создания новой таблицы выполните:

chmod +x ./tools/gen.d
./tools/gen.d > ./source/gear.d

Установка

  • В dub.json:
    "dependencies": {
    	"cdcdb": "~>0.1"
    }
    
  • Сборка: dub build.

Лицензия

Boost Software License 1.0 (BSL-1.0).