forked from dlang/cdcdb
99 lines
5.6 KiB
Markdown
99 lines
5.6 KiB
Markdown
# 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. Ничего не возвращает.
|
||
- `getVersion`: Возвращает строку с версией библиотеки (например, "0.0.2").
|
||
- `removeSnapshots`: Удаляет снимки по метке, ID или объекту Snapshot. Возвращает количество удаленных снимков (для метки) или `true`/`false` (для ID или объекта).
|
||
|
||
### 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;
|
||
import zstd : Level;
|
||
|
||
void main()
|
||
{
|
||
// Создаем базу
|
||
string dbPath = "example.db";
|
||
|
||
// Инициализация Storage с компрессией Zstd
|
||
auto storage = new Storage(dbPath, true, Level.speed);
|
||
|
||
// Создание снимка
|
||
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.0"
|
||
}
|
||
```
|
||
- **Сборка**: `dub build`.
|
||
|
||
## Лицензия
|
||
Boost Software License 1.0 (BSL-1.0).
|