forked from dlang/cdcdb
Добавлены описания
This commit is contained in:
parent
8716a90463
commit
8639c36f46
8 changed files with 388 additions and 34 deletions
99
README.ru.md
Normal file
99
README.ru.md
Normal file
|
@ -0,0 +1,99 @@
|
|||
# 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).
|
Loading…
Add table
Add a link
Reference in a new issue