forked from dlang/cdcdb
Добавлены описания
This commit is contained in:
parent
8716a90463
commit
8639c36f46
8 changed files with 388 additions and 34 deletions
80
test/app.d
80
test/app.d
|
@ -1,27 +1,69 @@
|
|||
import std.stdio;
|
||||
|
||||
import cdcdb;
|
||||
|
||||
import std.file : read, write;
|
||||
import std.stdio : File, writeln;
|
||||
import std.conv : to;
|
||||
|
||||
import std.stdio : writeln, File;
|
||||
import std.file : exists, remove, read;
|
||||
import zstd : Level;
|
||||
|
||||
void main()
|
||||
{
|
||||
auto storage = new Storage("/tmp/base.db", true, 22);
|
||||
storage.newSnapshot("/tmp/text", cast(ubyte[]) read("/tmp/text"));
|
||||
// Создаем временную базу для примера
|
||||
string dbPath = "./bin/example.db";
|
||||
|
||||
// if (snapshot !is null) {
|
||||
// writeln(cast(string) snapshot.data);
|
||||
// snapshot.remove();
|
||||
// }
|
||||
// Инициализация Storage с компрессией Zstd
|
||||
auto storage = new Storage(dbPath, true, Level.speed);
|
||||
|
||||
foreach (snapshot; storage.getSnapshots()) {
|
||||
auto file = File("/tmp/restore" ~ snapshot.id.to!string, "wb");
|
||||
snapshot.data((const(ubyte)[] content) {
|
||||
file.rawWrite(content);
|
||||
});
|
||||
file.close();
|
||||
// Настройка параметров CDC (опционально)
|
||||
storage.setupCDC(256, 512, 1024, 0xFF, 0x0F);
|
||||
|
||||
// Тестовые данные
|
||||
ubyte[] data1 = cast(ubyte[]) "Hello, cdcdb!".dup;
|
||||
ubyte[] data2 = cast(ubyte[]) "Hello, updated cdcdb!".dup;
|
||||
|
||||
// Создание первого снимка
|
||||
auto snap1 = storage.newSnapshot("example_file", data1, "Версия 1.0");
|
||||
if (snap1)
|
||||
{
|
||||
writeln("Создан снимок с ID: ", snap1.id);
|
||||
writeln("Метка: ", snap1.label);
|
||||
writeln("Размер: ", snap1.length, " байт");
|
||||
writeln("Статус: ", snap1.status);
|
||||
}
|
||||
|
||||
// Создание второго снимка (обновление)
|
||||
auto snap2 = storage.newSnapshot("example_file", data2, "Версия 2.0");
|
||||
if (snap2)
|
||||
{
|
||||
writeln("Создан обновленный снимок с ID: ", snap2.id);
|
||||
}
|
||||
|
||||
// Получение всех снимков по метке
|
||||
auto snapshots = storage.getSnapshots("example_file");
|
||||
writeln("Найдено снимков: ", snapshots.length);
|
||||
|
||||
// Восстановление данных из последнего снимка (потоково, для экономии памяти)
|
||||
if (snapshots.length > 0)
|
||||
{
|
||||
auto lastSnap = snapshots[$ - 1]; // Последний снимок
|
||||
File outFile = File("./bin/restored.txt", "wb");
|
||||
lastSnap.data((const(ubyte)[] chunk) { outFile.rawWrite(chunk); });
|
||||
outFile.close();
|
||||
writeln("Данные восстановлены в restored.txt");
|
||||
|
||||
// Проверка хэша (опционально)
|
||||
import std.digest.sha : digest, SHA256;
|
||||
|
||||
auto restoredData = cast(ubyte[]) read("./bin/restored.txt");
|
||||
assert(restoredData == data2);
|
||||
writeln("Хэш совпадает: ", lastSnap.sha256 == digest!SHA256(restoredData));
|
||||
}
|
||||
|
||||
// Удаление снимков по метке
|
||||
long deleted = storage.removeSnapshots("example_file");
|
||||
writeln("Удалено снимков: ", deleted);
|
||||
|
||||
// Проверка: снимки удалены
|
||||
auto remaining = storage.getSnapshots("example_file");
|
||||
assert(remaining.length == 0);
|
||||
writeln("Все снимки удалены.");
|
||||
|
||||
writeln("Версия библиотеки: ", storage.getVersion());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue