Skip to main content

Database engine

The public entry point is CatDb.Database.CatDb, a static factory that creates IStorageEngine instances.

var engine = CatDb.Database.CatDb.FromFile("app.catdb");

StorageEngine inherits from WTree and adds named logical structures: tables and files. Internally, each structure is described by a Locator and stored in the shared WTree.

Factory methods

MethodUse case
FromNetwork(host, port, databaseName, userName, password)Remote TCP client — the server-first path.
FromNetworkAsync(...)Async TCP connection setup.
FromConnectionString(connectionString)One Key=Value;... string for any provider (File/Memory/Network); see below.
FromConnectionStringAsync(connectionString)Async version — only the Network provider actually awaits.
FromFile(fileName, options)Local: open or create a persistent database file.
FromMemory(options)Local: tests, demos, temporary stores.
FromStream(stream, options)Local: store on any seekable stream.
FromHeap(heap, options)Local: custom heap implementation.
CreateServer(engine, port)Wrap an engine in the TCP storage server.

Connection strings

FromConnectionString covers all three backends from one ADO.NET-style string — Key=Value;Key=Value;..., keys case-insensitive, common aliases accepted. Provider picks the backend explicitly (File/Disk, Memory/Mem/InMemory, Network/Remote/Tcp/Server); if omitted it's inferred from the other keys present (Host → Network, Path → File, else → Memory).

using var remote = CatDb.Database.CatDb.FromConnectionString(
"Provider=Network;Host=localhost;Port=7182;Database=default;User Id=admin;Password=secret");

using var file = CatDb.Database.CatDb.FromConnectionString(
"Provider=File;Path=app.catdb;CommitMode=TransactionLog;CacheSizeBytes=2GB");

using var memory = CatDb.Database.CatDb.FromConnectionString("Provider=Memory;UseNativeLeafStorage=true");

Network keys: Host/Server/Address, Port (default 7182), Database/DatabaseName/Catalog, UserName/User Id/UID, Password/PWD, plus InitialPageCapacity/MaxPageCapacity/PageGrowthFactor/WriteBatchCapacity/CacheSize for client tuning.

File/Memory keys map onto every DatabaseOptions property (CommitMode, CommitDurability, CheckpointIntervalMs, CheckpointLogSizeBytes, IncrementalCheckpoint, CheckpointMaxNodes, MaxBranchesPerNode, MaxRecordsPerLeaf, MinRecordsPerLeaf, MaxOperationsInRoot, MaxOperationsPerNode, MinOperationsPerNode, CacheSize, CacheSizeBytes, UseNativeLeafStorage), plus Path/File/Filename (File only), UseCompression/Compression, and AllocationStrategy/Strategy. Byte-size values accept KB/MB/GB/TB suffixes (e.g. CacheSizeBytes=2GB).

StorageEngine responsibilities

  • Creates and reopens named XTABLE and XFILE structures.
  • Validates that reopened names match their original key and record schemas.
  • Maintains table metadata such as create, modify, and access timestamps.
  • Flushes modified tables before each commit.
  • Persists the scheme and tree through the inherited WTree commit path.

Database options

using CatDb.Database;
using CatDb.Storage;

var options = new DatabaseOptions
{
CommitMode = CommitMode.WriteAheadLog,
MaxBranchesPerNode = 64,
MaxRecordsPerLeaf = 8192,
CacheSize = 4096,
};

using var engine = CatDb.Database.CatDb.FromFile("app.catdb", options);
OptionDefaultMeaning
CommitModeWriteAheadLogCrash-safe WAL commits by default.
MaxBranchesPerNode64Maximum children per internal WTree node before split.
MaxRecordsPerLeaf8192Maximum records per leaf before split.
MinRecordsPerLeaf4096Merge/underflow threshold.
MaxOperationsInRoot4096Buffered root operations before cascading.
MaxOperationsPerNode8192Buffered operations per internal node before sinking.
MinOperationsPerNode4096Lower threshold used while sinking.
CacheSize4096Number of WTree nodes kept in memory.

WTree in one pass

The WTree is a write-buffered ordered tree. Writes enter a branch cache first. When a cache grows too large, the engine performs a fall: it applies buffered operations to the current node, restructures if needed, then broadcasts operations down to child branches.

Read operations flush pending table operations before navigation, then walk the tree top-down to the target leaf. This keeps range scans ordered while letting write bursts be amortized.

Heap and persistence

The WTree serializes branches and metadata into an IHeap. FromFile creates a Heap over an OptimizedFileStream; with the default commit mode, that heap is wrapped by WalHeap.

Reserved heap handles:

HandleContent
0WTree settings
1Scheme and locators
2Root branch cache
3Reserved
4+Node data