cdcdb/README.ru.md

98 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).
## Пример использования
```d
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. Он позволяет генерировать пользовательские таблицы хэшей для настройки разделения данных. Для создания новой таблицы выполните:
```bash
chmod +x ./tools/gen.d
./tools/gen.d > ./source/gear.d
```
## Установка
- **В `dub.json`**:
```json
"dependencies": {
"cdcdb": "~>0.1"
}
```
- **Сборка**: `dub build`.
## Лицензия
Boost Software License 1.0 (BSL-1.0).