Skip to content

Benchmark Results

These benchmarks cover a narrow set of v0.1 workloads. On the workloads covered here, the C#-native embedded path avoids client/server round trips and some runtime mapping overhead. The headline run shows DataVo LSM Relaxed sustaining roughly 1.2M operations per second in a single-thread thread-scaling workload, and the vector benchmark shows a large managed-allocation gap against document-oriented brute-force paths.

These are local benchmark results, not universal rankings. The primary measurements were generated by the repository benchmark host on July 3, 2026 with .NET 10.0.103 on macOS arm64 / Apple Silicon. The vector comparison used sqlite-vec through the checked-in SQLITE_VEC_PATH value. Different hardware, filesystem behavior, .NET versions, native extensions, data shapes, and durability settings will change the numbers.

The most important benchmark distinction is durability. DataVo (LSM Production) means strict WAL fsync before a write is acknowledged. DataVo (LSM Relaxed) means the write is appended through the OS-buffered path without a synchronous stable-storage wait. Relaxed mode is a useful throughput ceiling for caches, rebuildable data, and research, but it must not be described as having the same power-loss contract as strict mode.

Use this page to answer three questions:

  • How fast can the current LSM write/read path go when durability is relaxed?
  • How much managed allocation does DataVo avoid on selected CRUD and vector workloads?
  • Where do the results still need careful caveats because DataVo is a v0.1 alpha engine?

The benchmark commands are reproducible from the repository root. For example, the thread-scaling run behind the 1.2M ops/s chart is launched through the benchmark host:

bash
dotnet run -c Release --project demos/Research.Benchmark/src/Research.Benchmark.Host -- --scenario thread-scaling --format markdown

The units are consistent across the page: elapsed time and latency are milliseconds (ms), throughput is operations per second (ops/s), GC allocation is megabytes allocated by the managed runtime (MB), disk footprint is megabytes on disk (MB), and derived comparisons are multiplicative ratios (x). Vector P50 and P99 values describe the query phase; vector total time includes insert/index-build work plus the query phase.

Charts use stable colors by engine family: DataVo blue, DataVo LSM Relaxed cyan, DataVo-Flat green, SQLite orange, LiteDB purple, and DuckDB red.

Workload Recipes

The full rerun was produced by demos/Research.Benchmark/src/Research.Benchmark.Host. These examples show the scenario commands and the representative DataVo schema/query shape. Several DataVo rows use typed APIs or prepared compiled queries after creating the schema; the SQL below documents the logical workload, not a claim that every operation is executed through ad-hoc SQL text.

bash
dotnet run -c Release --project demos/Research.Benchmark/src/Research.Benchmark.Host -- --scenario flat-crud --format markdown
dotnet run -c Release --project demos/Research.Benchmark/src/Research.Benchmark.Host -- --scenario disk-crud-wal --records 20000 --format markdown
dotnet run -c Release --project demos/Research.Benchmark/src/Research.Benchmark.Host -- --scenario vector-search --vectors 10000 --dimensions 1536 --queries 100 --topk 10 --format markdown
dotnet run -c Release --project demos/Research.Benchmark/src/Research.Benchmark.Host -- --scenario thread-scaling --format markdown
dotnet run -c Release --project demos/Research.Benchmark/src/Research.Benchmark.Host -- --scenario ycsb-mixed --records 100000 --format markdown
dotnet run -c Release --project demos/Research.Benchmark/src/Research.Benchmark.Host -- --scenario space-and-recovery --records 1000000 --format markdown

Flat CRUD, disk CRUD, concurrent ops, thread scaling, YCSB, and space/recovery use the same logical record shape:

sql
CREATE TABLE Records (
    Id INT PRIMARY KEY,
    Name VARCHAR(40),
    Value INT,
    Score FLOAT
);

-- Point lookup shape used by prepared compiled reads:
SELECT Id, Name, Value, Score
FROM Records
WHERE Id = @id;

-- Disk/YCSB update shape:
UPDATE Records
SET Value = @value, Score = @score
WHERE Id = @id;

The vector workload creates a vector column and either an HNSW or FLAT vector index:

sql
CREATE TABLE Vectors (
    Id INT PRIMARY KEY,
    Emb VECTOR(1536)
);

CREATE INDEX vidx ON Vectors (Emb) USING HNSW;
-- DataVo-Flat uses: CREATE INDEX vidx ON Vectors (Emb) USING FLAT;

The simple risk workload subscribes to reactive aggregate views over a single Orders table:

sql
CREATE TABLE Orders (
    OrderId INT,
    MarketId INT,
    RunnerId INT,
    AccountId INT,
    Side VARCHAR(8),
    Price INT,
    Stake INT,
    IsOpen BIT
);

SELECT MarketId, RunnerId, MAX(Price) AS BestBack, MIN(Price) AS BestLay, SUM(Stake) AS OpenExposure
FROM Orders
WHERE IsOpen = true
GROUP BY MarketId, RunnerId;

The complex VIP workload measures reactive maintenance over a join and aggregate:

sql
CREATE TABLE Accounts (Id INT, IsVip BIT);
CREATE TABLE Markets (Id INT, Category VARCHAR(40));
CREATE TABLE Orders (Id INT, AccountId INT, MarketId INT, Stake INT);

SELECT m.Category, SUM(o.Stake) AS TotalExposure
FROM Orders o
JOIN Accounts a ON o.AccountId = a.Id
JOIN Markets m ON o.MarketId = m.Id
WHERE a.IsVip = true
GROUP BY m.Category;

The deep-document workload intentionally normalizes an order across three tables, then reconstructs the object through indexed child lookups:

sql
CREATE TABLE Orders (Id INT PRIMARY KEY, Customer VARCHAR(40), Total FLOAT);
CREATE TABLE OrderItems (Id INT PRIMARY KEY, OrderId INT, Sku INT, Name VARCHAR(40), Quantity INT, UnitPrice FLOAT);
CREATE TABLE Addresses (Id INT PRIMARY KEY, OrderId INT, Kind VARCHAR(10), Street VARCHAR(40), City VARCHAR(40), PostalCode VARCHAR(12));

CREATE INDEX ix_OrderItems_OrderId ON OrderItems (OrderId);
CREATE INDEX ix_Addresses_OrderId ON Addresses (OrderId);

Headline Charts

The fallback tables below use the same July 3, 2026 macOS arm64 / Apple Silicon measurements described above. They are included so the raw Markdown and AI export show the exact chart data even when interactive Vue charts are not rendered.

LSM relaxed thread scaling

Workload: preload 100,000 records, then run 100,000 reads and 10,000 updates at 1, 2, 4, 8, 16, and 32 threads.

ThreadsDataVo LSM Relaxed ops/sSQLite WAL normal ops/sLiteDB ops/s
11,215,413.207318,474.93452,043.089
21,192,483.021515,803.27563,226.160
41,044,648.267541,284.77463,082.810
81,025,016.936586,604.72159,112.129
161,041,723.883582,041.07063,418.034
321,022,364.692514,214.28561,971.122
Thread scaling throughputPreload 100,000 records, then run 100,000 reads and 10,000 updates.linear scale
0262.5K525.1K787.6K1.1M1.3MThroughput (operations per second)Thread count12481632

Linear scale keeps the 1M ops/s plateau visible while preserving SQLite and LiteDB trend shape.

YCSB mixed write tail

Workload: preload 100,000 records, then run 80,000 reads and 20,000 updates across 12 threads.

EngineWrite P99 (ms)Ops/s
DataVo LSM Relaxed1.333833626,690.498
SQLite WAL normal3.408333233,778.627
LiteDB3.78512535,866.077
YCSB write P99 latency80,000 reads and 20,000 updates across 12 threads.linear scale
00.8181.6352.4533.274.088Write P99 latency (milliseconds)Workload metricWrite P99DataVo relaxedSQLite normalLiteDB

SQLite WAL normal write P99 is 2.56x DataVo LSM relaxed in this run.

Vector allocation

Workload: insert 10,000 vectors with 1536 dimensions, then run 100 top-10 queries.

EngineGC allocated (MB)Notes
DataVo157.246HNSW build dominates total time.
DataVo-Flat10.331Flat SIMD path allocation floor.
LiteDB208,915.002Brute-force document allocation.
SQLite63.427sqlite-vec native extension.
1536-dim vector search GC allocationInsert 10,000 x 1536-dim vectors, then run 100 top-10 queries.log scale
1101001K10K100K1MGC allocation (MB, log scale)Workload metricTotal GC allocationDataVoDataVo-FlatLiteDBSQLite

Log scale is used because LiteDB allocation is four orders of magnitude above DataVo-Flat.

Disk CRUD total time

Workload: insert 20,000 records, then run 20,000 point updates under WAL.

EngineTotal time (ms)Notes
DataVo LSM Production501.870Strict LSM fsync.
DataVo LSM Relaxed247.080Relaxed OS-buffered LSM.
SQLite WAL normal842.914SQLite WAL normal.
SQLite WAL full84,638.110SQLite WAL full.
Disk CRUD WAL total timeInsert 20,000 records, then run 20,000 point updates.log scale
101001K10K100KTotal time (milliseconds, log scale)Workload metricTotal timeDataVo prodDataVo relaxedSQLite normalSQLite full

Log scale keeps SQLite full visible without flattening the lower-latency modes.

Streamed Risk Profile A: Simple Exposure

Workload: preload 10,000 baseline orders, then measure 50,000 insert+read iterations.

Simple exposure total time50,000 insert+read iterations after 10,000 baseline orders.log scale
101001K10K100KTotal time (milliseconds, log scale)Workload metricTotal timeDataVoDuckDBSQLite

Log scale is used because DuckDB total time is over two orders of magnitude above DataVo in this harness.

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo585.7710.0087080.025667355.569
DuckDB95,492.8971.10608410.157792208.316
SQLite2,820.3460.0396250.250750198.906

Streamed Risk Profile B: Complex VIP

Workload: preload 10,000 orders, 1,000 accounts, and 50 markets, then measure 50,000 complex JOIN + GROUP BY insert+read iterations.

Complex VIP total time50,000 complex JOIN + GROUP BY insert+read iterations.log scale
101001K10K100K1MTotal time (milliseconds, log scale)Workload metricTotal timeDataVoDuckDBSQLite

Log scale is used because SQLite total time is hundreds of times larger than DataVo in this workload.

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo485.5250.0034590.03629297.467
DuckDB42,996.1540.7079163.744333131.245
SQLite401,777.6176.61670824.384834115.598

Flat CRUD

Workload: insert 50,000 records, then run 50,000 point lookups.

Flat CRUD total time50,000 inserts followed by 50,000 point lookups.linear scale
01K2.1K3.1K4.2K5.2KTotal time (milliseconds)Workload metricTotal timeDataVoLiteDBSQLite

Linear scale is retained here because the spread is readable and absolute elapsed time is the comparison.

EngineTotal time (ms)P50 (ms)P99 (ms)Insert GC (MB)Lookup GC (MB)Total GC (MB)
DataVo404.3670.0024590.01620819.3902.29021.680
LiteDB4,830.4810.0480000.558208634.7001,838.3132,473.012
SQLite689.4750.0057500.01979131.28630.82462.110

Disk CRUD With WAL

Workload: insert 20,000 records, then run 20,000 point updates.

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo (LSM Production)501.8700.0000420.00012523.074
DataVo (LSM Relaxed)247.0800.0000830.00020817.782
SQLite (WAL,normal)842.9140.0286250.12787523.190
SQLite (WAL,full)84,638.1104.0199177.94550021.371

The retained figure calculations also include a separate SQLite full+fullfsync run, with 209,282.571 ms total time. It is kept in the derived ratios below, but it is not part of the main v2 benchmark table.

Deep Document

Workload: save 5,000 nested orders, each with 5 items and 2 addresses, then load 5,000 orders.

Deep document total timeSave and load 5,000 nested orders.linear scale
0437.891875.7811.3K1.8K2.2KTotal time (milliseconds)Workload metricTotal timeDataVoLiteDBSQLite

Linear scale keeps the elapsed-time differences directly comparable.

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo312.7080.0119580.15308323.051
LiteDB2,027.2710.1609161.013833332.302
SQLite777.2680.0467920.14595846.050

Concurrent Ops

Workload: preload 100,000 records, then run 8 readers and 2 writers for 5 seconds.

Concurrent workload throughput8 readers and 2 writers for 5 seconds after 100,000-row preload.linear scale
0110.6K221.1K331.7K442.2K552.8KThroughput (operations per second)Workload metricOPSDataVoSQLite

Throughput is plotted separately from latency because the units are different.

Concurrent workload write tailSame run, write P99 latency.log scale
0.11101001K10KWrite P99 latency (milliseconds, log scale)Workload metricWrite P99DataVoSQLite

Log scale is used because SQLite write P99 is over three orders of magnitude larger in this concurrent run.

EngineTotal time (ms)Ops/sRead P99 (ms)Write P99 (ms)GC allocated (MB)
DataVo5,084.770511,827.7040.0388754.466542626.927
SQLite5,312.498191,068.4810.3217505,306.753000566.248

Workload: insert 10,000 vectors with 1536 dimensions, then run 100 top-10 queries.

Vector query P99 latency100 top-10 vector queries after inserting 10,000 x 1536-dim vectors.log scale
0.11101001K10KP99 query latency (milliseconds, log scale)Workload metricQuery P99DataVoDataVo-FlatLiteDBSQLite

Log scale is used because LiteDB query P99 is roughly three orders of magnitude above DataVo and SQLite.

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo160,508.5292.3371253.015500157.246
DataVo-Flat580.6082.12441710.48858410.331
LiteDB95,716.480881.4664172,989.564083208,915.002
SQLite463.9042.3863333.10629163.427

The vector result needs two separate interpretations. The HNSW-backed DataVo row shows low query latency but high build time in this 10k-vector run. DataVo-Flat shows the allocation win: 10.331 MB allocated versus LiteDB's 208,915.002 MB, while keeping per-query latency in the same millisecond class as SQLite sqlite-vec.

Thread Scaling

ThreadsDataVo LSM Production ops/sDataVo LSM Relaxed ops/sSQLite WAL normal ops/sLiteDB ops/s
12,478.6481,215,413.207318,474.93452,043.089
22,962.3241,192,483.021515,803.27563,226.160
44,788.3471,044,648.267541,284.77463,082.810
87,274.7641,025,016.936586,604.72159,112.129
167,480.3461,041,723.883582,041.07063,418.034
329,110.3731,022,364.692514,214.28561,971.122

YCSB Mixed

Workload: preload 100,000 records, then run 80,000 reads and 20,000 updates across 12 threads.

YCSB mixed throughput80,000 reads and 20,000 updates across 12 threads.log scale
1001K10K100K1MThroughput (operations per second, log scale)Workload metricOPSDataVo prodDataVo relaxedSQLite normalLiteDB

Log scale is used because strict LSM fsync throughput is intentionally much lower than relaxed LSM throughput.

EngineTotal time (ms)Ops/sRead P99 (ms)Write P99 (ms)GC allocated (MB)
DataVo (LSM Production)24,885.5064,018.4030.01345850.72158326.222
DataVo (LSM Relaxed)159.568626,690.4980.0009171.33383323.268
SQLite (WAL,normal)427.755233,778.6270.0105003.40833357.405
LiteDB2,788.15035,866.0773.2742503.7851254,304.721

Space And Recovery

Workload: insert 1,000,000 records, measure disk footprint, then measure cold-open recovery time.

Disk footprint after 1M insertsInsert 1,000,000 records, then measure cold-open recovery.linear scale
033.36466.727100.091133.454166.818Disk footprint (megabytes)Workload metricDisk sizeDataVo relaxedSQLite normalLiteDB

Linear scale is appropriate here; SQLite is 13.76% smaller than DataVo relaxed, while LiteDB is 2.32x DataVo.

EngineInsert time (ms)Disk size (MB)Recovery time (ms)GC allocated (MB)
DataVo (LSM Production)972.01866.4430.609286.966
DataVo (LSM Relaxed)447.23766.4430.500206.688
SQLite (WAL,normal)714.77658.4050.386631.917
LiteDB2,979.232154.4610.67415,158.872

SQLite is smaller than DataVo in this run by 13.76 percent. LiteDB uses 2.32x the DataVo relaxed footprint.

Derived Calculations

Derived benchmark ratiosDerived comparison ratios.log scale
0.11101001KRatio (times, log scale)Derived comparisonFullfsyncDisk CRUDThread OPSWrite P99Read P99Space

Log scale makes the 417x fullfsync ratio readable without hiding the smaller 2x-11x ratios.

MetricFormulaResult
SQLite full+fullfsync disk CRUD time vs DataVo LSM Production209282.571 / 501.870417.01x
SQLite WAL normal disk CRUD time vs DataVo LSM Relaxed842.914 / 247.0803.41x
DataVo LSM Relaxed 1-thread ops/s vs SQLite WAL normal1215413.207 / 318474.9343.82x
SQLite WAL normal YCSB write P99 vs DataVo LSM Relaxed3.408333 / 1.3338332.56x
SQLite WAL normal YCSB read P99 vs DataVo LSM Relaxed0.010500 / 0.00091711.45x
DataVo LSM Relaxed ingest GCverified fixed rerun GC MB206.688 MB
SQLite space over DataVo space(58.405 - 66.443) / 58.405 * 100-13.76%
LiteDB space vs DataVo space154.461 / 66.4432.32x

Linux CI Snapshot - July 4, 2026

These measurements were produced by the GitHub Actions Linux benchmark workflow on July 4, 2026 at 2026-07-04T19:39:29Z. Environment: Ubuntu 24.04 hosted runner on Azure, Linux kernel 6.17.0-1018-azure, x64, .NET SDK 10.0.301, .NET host 10.0.9.

This is appended as a separate Linux snapshot. It does not replace the July 3, 2026 macOS arm64 measurements above. SQLite vector search reported n/a in this run because SQLITE_VEC_PATH was not set on the runner; the workflow now downloads and exports the pinned sqlite-vec Linux x86_64 loadable extension so this scenario should be rerun.

Linux simple exposure

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo1,225.5390.0161900.110096355.567
DuckDB174,377.0973.4285544.678679208.302
SQLite1,402.7450.0223120.061395199.203

Linux complex VIP

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo467.4310.0075340.02216197.468
DuckDB113,237.8192.2368632.901818131.237
SQLite231,680.3534.5802728.061315115.604

Linux flat CRUD

EngineTotal time (ms)P50 (ms)P99 (ms)Insert GC (MB)Lookup GC (MB)Total GC (MB)
DataVo146.3170.0012630.00204419.3902.29021.680
LiteDB2,856.8040.0224320.110727635.9491,832.8552,468.804
SQLite340.6350.0032860.00440831.28530.82462.109

Linux disk CRUD WAL

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo (LSM Production)473.2810.0000900.00012044.468
DataVo (LSM Relaxed)212.5020.0000910.00012131.751
SQLite (WAL,normal)1,057.5200.0138160.02935557.196
SQLite (WAL,full)7,792.3030.1080220.48902653.414

Linux deep document

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo156.7550.0099280.02295223.056
LiteDB1,458.1410.1874920.260218332.249
SQLite373.1220.0201680.03321246.048

Linux concurrent ops

EngineTotal time (ms)Ops/sRead P99 (ms)Write P99 (ms)GC allocated (MB)
DataVo9,020.0012,368,026.9310.0056300.0000001,716.644
SQLite5,107.857199,916.3210.1853173,303.239339570.333
EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo84,798.7032.6021063.020380157.245
DataVo-Flat616.4483.01289510.73453410.327
LiteDB168,891.4951,657.3449041,700.552233208,915.187
SQLiten/an/an/an/a

Linux thread scaling

EngineThreadsTotal time (ms)Ops/sGC allocated (MB)
DataVo (LSM Production)13,478.49231,622.90123.676
DataVo (LSM Production)22,818.40439,029.17821.620
DataVo (LSM Production)41,629.28267,514.39420.040
DataVo (LSM Production)81,404.68378,309.46118.860
DataVo (LSM Production)161,406.29178,219.96419.889
DataVo (LSM Production)321,358.68380,960.77819.873
DataVo (LSM Relaxed)1190.012578,911.11020.154
DataVo (LSM Relaxed)2189.798579,564.75717.704
DataVo (LSM Relaxed)4211.100521,080.79717.704
DataVo (LSM Relaxed)8211.885519,149.78417.705
DataVo (LSM Relaxed)16211.247520,718.19317.705
DataVo (LSM Relaxed)32215.962509,349.81017.706
SQLite (WAL,normal)1895.974122,771.37962.036
SQLite (WAL,normal)2589.814186,499.34662.036
SQLite (WAL,normal)4531.915206,800.07562.041
SQLite (WAL,normal)8500.144219,936.79062.037
SQLite (WAL,normal)16499.692220,135.47162.033
SQLite (WAL,normal)32440.481249,726.72062.070
LiteDB14,561.65224,114.0714,365.008
LiteDB24,940.17522,266.4184,350.736
LiteDB45,168.33921,283.4344,350.736
LiteDB85,184.34921,217.7084,350.608
LiteDB165,198.95021,158.1174,350.882
LiteDB325,289.05720,797.6584,350.565

Linux YCSB mixed

EngineTotal time (ms)Ops/sRead P99 (ms)Write P99 (ms)GC allocated (MB)
DataVo (LSM Production)3,366.27529,706.4300.0106402.29335726.502
DataVo (LSM Relaxed)397.577251,523.6670.0027960.41847221.002
SQLite (WAL,normal)1,284.69577,839.4690.0432913.22329055.510
LiteDB6,660.99515,012.7720.1349830.2767384,276.401

Linux space and recovery

EngineInsert time (ms)Disk size (MB)Recovery time (ms)GC allocated (MB)
DataVo (LSM Production)1,608.83266.4440.967286.389
DataVo (LSM Relaxed)1,054.68866.4440.819205.669
SQLite (WAL,normal)1,794.01858.4050.685629.097
LiteDB7,416.158154.4611.42515,158.757

Linux CI Snapshot - July 4, 2026 sqlite-vec rerun

These measurements were produced by the GitHub Actions Linux benchmark workflow on July 4, 2026 at 2026-07-04T20:13:44Z, after the workflow began downloading the pinned sqlite-vec loadable extension. Environment: Ubuntu 24.04 hosted runner on Azure, Linux kernel 6.17.0-1018-azure, x64, .NET SDK 10.0.301, .NET host 10.0.9, sqlite-vec 0.1.9 from sqlite-vec-0.1.9-loadable-linux-x86_64.tar.gz with SHA256 b959baa1d8dc88861b1edb337b8587178cdcb12d60b4998f9d10b6a82052d5d7.

This is appended as a separate sqlite-vec-enabled Linux snapshot. SQLite vector search now reports measured results instead of n/a.

Linux rerun headline charts

The charts below summarize the sqlite-vec-enabled Linux rerun: vector total time, vector query P99, and thread-scaling throughput. The raw tables that follow retain the exact values.

Linux vector search total time10,000 x 1536-dim vectors, then 100 top-10 queries.log scale
101001K10K100K1MTotal time (milliseconds, log scale)Workload metricTotal timeDataVoDataVo-FlatLiteDBSQLite/sqlite-vec

Linux CI now loads sqlite-vec; SQLite total time includes native vec0 insert/build and query work.

Linux vector search query P99Query-phase P99 latency for 100 top-10 searches.log scale
0.11101001K10KQuery P99 latency (milliseconds, log scale)Workload metricP99DataVoDataVo-FlatLiteDBSQLite/sqlite-vec

DataVo HNSW has the lowest query P99 in this run; DataVo-Flat has the lowest total time.

Linux thread scaling throughputPreload 100,000 records, then run 100,000 reads and 10,000 updates.linear scale
0149.6K299.1K448.7K598.2K747.8KThroughput (operations per second)Thread count12481632

This is the Linux CI rerun, not the macOS arm64 headline chart above.

Linux rerun simple exposure

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo1,241.7470.0162410.110366355.567
DuckDB170,289.7223.3626464.548743208.302
SQLite1,430.8250.0224820.062748199.715

Linux rerun complex VIP

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo471.4200.0079340.02106997.473
DuckDB110,489.4232.1904142.623444131.237
SQLite233,819.4904.5891648.130840115.601

Linux rerun flat CRUD

EngineTotal time (ms)P50 (ms)P99 (ms)Insert GC (MB)Lookup GC (MB)Total GC (MB)
DataVo148.3300.0012520.00203419.3962.29021.686
LiteDB2,815.6030.0228320.103844635.9451,833.1592,469.104
SQLite341.8960.0032060.00484931.28530.82462.109

Linux rerun disk CRUD WAL

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo (LSM Production)480.4930.0000900.00011149.339
DataVo (LSM Relaxed)213.7260.0000900.00012036.613
SQLite (WAL,normal)1,136.9520.0137260.02930557.003
SQLite (WAL,full)9,058.9130.1198840.59071453.414

Linux rerun deep document

EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo155.2200.0103090.02288323.061
LiteDB1,410.5230.1858990.284583332.249
SQLite366.9100.0200880.03273146.048

Linux rerun concurrent ops

EngineTotal time (ms)Ops/sRead P99 (ms)Write P99 (ms)GC allocated (MB)
DataVo9,009.9682,765,510.7290.0052900.0000001,906.625
SQLite5,107.601212,973.7620.1729725,104.352643606.056
EngineTotal time (ms)P50 (ms)P99 (ms)GC allocated (MB)
DataVo79,536.8092.3163132.557093157.246
DataVo-Flat602.7782.88142510.59542410.327
LiteDB164,640.2541,614.7030161,663.416067208,915.221
SQLite2,186.12818.41420719.58925463.279

Linux rerun thread scaling

EngineThreadsTotal time (ms)Ops/sGC allocated (MB)
DataVo (LSM Production)14,018.15327,375.76223.509
DataVo (LSM Production)23,196.82934,409.09521.619
DataVo (LSM Production)41,793.89261,319.18820.033
DataVo (LSM Production)81,575.77869,806.78318.875
DataVo (LSM Production)161,675.56065,649.69719.914
DataVo (LSM Production)321,563.81570,340.79219.863
DataVo (LSM Relaxed)1164.316669,441.40020.064
DataVo (LSM Relaxed)2158.874692,373.00817.704
DataVo (LSM Relaxed)4197.305557,513.04617.704
DataVo (LSM Relaxed)8198.395554,449.45717.705
DataVo (LSM Relaxed)16198.810553,293.47917.705
DataVo (LSM Relaxed)32199.483551,425.98817.706
SQLite (WAL,normal)1879.018125,139.63062.036
SQLite (WAL,normal)2584.524188,187.21562.036
SQLite (WAL,normal)4532.204206,687.66162.041
SQLite (WAL,normal)8453.247242,693.11762.056
SQLite (WAL,normal)16435.627252,509.77562.045
SQLite (WAL,normal)32451.444243,662.72062.041
LiteDB14,488.73424,505.7994,367.394
LiteDB24,487.83224,510.7244,350.557
LiteDB44,962.19322,167.6194,350.839
LiteDB85,190.49721,192.5784,350.763
LiteDB164,966.14822,149.9644,350.672
LiteDB324,937.01322,280.6774,350.705

Linux rerun YCSB mixed

EngineTotal time (ms)Ops/sRead P99 (ms)Write P99 (ms)GC allocated (MB)
DataVo (LSM Production)3,773.36226,501.5630.0103092.50652626.132
DataVo (LSM Relaxed)370.689269,767.9910.0024450.38407821.123
SQLite (WAL,normal)1,331.57775,098.9300.0451443.21994855.506
LiteDB6,546.63115,275.0330.1318460.2456504,276.233

Linux rerun space and recovery

EngineInsert time (ms)Disk size (MB)Recovery time (ms)GC allocated (MB)
DataVo (LSM Production)1,597.58666.4440.929286.401
DataVo (LSM Relaxed)1,036.80766.4440.802205.669
SQLite (WAL,normal)1,779.35158.4050.633629.039
LiteDB6,891.179154.4611.34215,158.796

Responsible Interpretation

DataVo's strongest current evidence is workload-specific: allocation-controlled typed rows, source-generated access paths, LSM write paths, and vector allocation behavior. The relaxed LSM results should not be presented as equivalent to strict fsync durability. SQLite and DuckDB remain mature engines with broad SQL support, sophisticated optimizers, and production hardening far beyond a v0.1 alpha embedded engine.