Skip to content

Export/Import API

Export and import database contents for backup, migration, or data transfer.

Quick Export

Export to a newly allocated buffer (no manual buffer management):

zig
// Export to allocated buffer (caller frees with page_allocator)
const data = try db.exportData(.raw_snapshot);
defer std.heap.page_allocator.free(data);

const json = try db.exportData(.jsonl);
defer std.heap.page_allocator.free(json);

const csv = try db.exportData(.csv);
defer std.heap.page_allocator.free(csv);

Export Formats

FormatDescription
.raw_snapshotNative binary format with ZKV header, fastest
.jsonlJSON Lines — one JSON object per line, human readable
.csvComma separated values, spreadsheet compatible

Quick Import

Import from a buffer:

zig
const count = try db.importData(data, .raw_snapshot);
std.debug.print("imported {d} entries\n", .{count});

Streaming Export/Import

For large datasets, use the streaming API with writers/readers:

zig
// Export to file
var file = try std.fs.cwd().createFile("backup.zkv", .{});
defer file.close();
try db.exportTo(file.writer(), .{ .format = .raw_snapshot });

// Import from file
var file2 = try std.fs.cwd().openFile("backup.zkv", .{});
defer file2.close();
const imported = try db.importFrom(file2.reader(), .{ .format = .raw_snapshot });

TIP

Use streaming export/import for large datasets to avoid loading everything into memory.

Snapshot

zig
const snapshot = db.getSnapshot();
defer snapshot.deinit(allocator);

for (snapshot.items) |entry| {
    std.debug.print("{s} = {s}\n", .{ entry.key, entry.value });
}

Backup and Restore

zig
// Backup
const backup = try db.exportData(.raw_snapshot);
defer std.heap.page_allocator.free(backup);

// Restore into new database
var restored = try zkv.Database.open(allocator, .{ .path = "restored.zkv" });
defer restored.close();
const count = try restored.importData(backup, .raw_snapshot);

IMPORTANT

Always test your backup and restore process. Verify data integrity after restore.

Export to JSONL

zig
const json = try db.exportData(.jsonl);
defer std.heap.page_allocator.free(json);
std.debug.print("{s}\n", .{json});

Export to CSV

zig
const csv = try db.exportData(.csv);
defer std.heap.page_allocator.free(csv);
std.debug.print("{s}\n", .{csv});

Released under the MIT License.