AtticDBInstall

Durable acks, Measured.

How fast can each system ack a write that survives power loss? 5 systems, 2 disks, 7 runs each.

Method and setup

Premium SSD v2

AtticDBRedisValkeyDiceDBSQLite1,167AtticDB466Redis472Valkey473DiceDB1,143SQLite1 writer2,619AtticDB1,022Redis936Valkey932DiceDB1,342SQLite4 writers9,328AtticDB5,151Redis5,096Valkey5,086DiceDB1,421SQLite16 writers
Closed-loop durable acks per second on Premium SSD v2
WritersAtticDBRedisValkeyDiceDBSQLite
11,1674664724731,143
42,6191,0229369321,342
169,3285,1515,0965,0861,421
Premium SSD v2: closed loop (medians of 7 runs)
WritersSystemAcks/sp50 µsp99 µsp99 range µsp99.9 µsmax µs
1atticdb1,1678171,5141,509 to 1,6362,0972,590
1redis4662,1363,2313,079 to 3,2534,24611,650
1valkey4722,1313,2143,057 to 3,2784,2158,883
1dicedb4732,1283,2043,133 to 3,2504,2227,982
1sqlite1,1437352,3652,253 to 2,4793,0294,763
4atticdb2,6191,4732,3662,246 to 2,4042,8754,026
4redis1,0223,9725,5685,436 to 5,6466,94513,518
4valkey9364,2555,6225,467 to 5,7387,94315,345
4dicedb9324,2735,6915,418 to 5,8108,42416,121
4sqlite1,3427041,9601,807 to 1,9932,7169,944,485
16atticdb9,3281,6182,7342,394 to 2,9373,3234,173
16redis5,1513,2925,1955,016 to 5,5827,46516,279
16valkey5,0963,1855,1615,038 to 5,6346,32725,764
16dicedb5,0863,5135,0634,988 to 5,7856,07211,252
16sqlite1,4217041,6961,639 to 1,8393,09846,787,988
Premium SSD v2: agent-shaped load (medians of 7 runs)
LoadSystemAcks/sp50 µsp99 µsp99 range µsp99.9 µsmax µs
64 writers, 5 msatticdb9,6641,2862,2462,194 to 2,3802,7646,213
64 writers, 5 msredis7,7792,9164,6934,526 to 5,0596,54513,334
64 writers, 5 msvalkey7,7962,9014,5974,442 to 5,1396,99211,483
64 writers, 5 msdicedb7,8402,8074,5924,424 to 4,9686,99811,928
64 writers, 5 mssqlite1,1053,860830,031829,880 to 830,4221,730,9343,731,498
256 writers, 50 msatticdb4,2701,2842,2592,184 to 2,3922,8275,302
256 writers, 50 msredis4,1513,0704,9554,700 to 5,43312,56033,249
256 writers, 50 msvalkey4,1543,0724,8604,694 to 9,7448,07128,153
256 writers, 50 msdicedb4,1493,0654,9854,590 to 5,3659,38427,769
256 writers, 50 mssqlite1,0389,4052,130,8991,830,926 to 2,131,2523,732,5986,534,968

AtticDB beats Redis, Valkey and DiceDB in every cell on this disk. It acks 1.8x to 2.8x as many writes in closed loop.

In every run its worst p99 rep beats their best rep. Under agent load its p50 is 1.3 ms against 2.8 to 3.1 ms.

In closed loop SQLite has a lower p50 at every writer count. Its p99 and p99.9 are lower at 4 and 16 writers.

Local NVMe

AtticDBRedisValkeyDiceDBSQLite9,799AtticDB8,110Redis8,434Valkey8,436DiceDB19,410SQLite1 writer24,516AtticDB17,504Redis18,444Valkey18,149DiceDB22,162SQLite4 writers48,611AtticDB44,572Redis42,928Valkey44,693DiceDB24,936SQLite16 writers
Closed-loop durable acks per second on Local NVMe
WritersAtticDBRedisValkeyDiceDBSQLite
19,7998,1108,4348,43619,410
424,51617,50418,44418,14922,162
1648,61144,57242,92844,69324,936
Local NVMe: closed loop (medians of 7 runs)
WritersSystemAcks/sp50 µsp99 µsp99 range µsp99.9 µsmax µs
1atticdb9,79994128113 to 320145300
1redis8,110116184171 to 708216354
1valkey8,434108172166 to 602212330
1dicedb8,436110179166 to 186214344
1sqlite19,41032157152 to 170411736
4atticdb24,516146214213 to 218251438
4redis17,504221304296 to 317348532
4valkey18,444202298286 to 324344474
4dicedb18,149208310298 to 327361467
4sqlite22,16232143138 to 160622729,400
16atticdb48,611305502493 to 5196741,210
16redis44,572299549543 to 564604932
16valkey42,928311573546 to 580624810
16dicedb44,693300547537 to 572609947
16sqlite24,93632124123 to 1286482,831,276
Local NVMe: agent-shaped load (medians of 7 runs)
LoadSystemAcks/sp50 µsp99 µsp99 range µsp99.9 µsmax µs
64 writers, 5 msatticdb11,687148416273 to 5217864,871
64 writers, 5 msredis11,648183382336 to 5679645,317
64 writers, 5 msvalkey11,641184506341 to 5641,0536,766
64 writers, 5 msdicedb11,644182504334 to 5471,0295,292
64 writers, 5 mssqlite8,5315733,38133,367 to 33,414103,539428,896
256 writers, 50 msatticdb4,351138558225 to 6367368,698
256 writers, 50 msredis4,351145612292 to 7522,1857,625
256 writers, 50 msvalkey4,352142496293 to 1,3182,7588,039
256 writers, 50 msdicedb4,352140348289 to 1,0782,1037,392
256 writers, 50 mssqlite4,2426818,48918,354 to 18,732103,782329,060

In closed loop AtticDB beats Redis, Valkey and DiceDB on every median at 1 and 4 writers.

At 16 writers it beats them on acks/s and p99 only: 48,611/s and 502 µs. Redis and DiceDB have a lower p50: 299 and 300 against 305 µs.

AtticDB's p99.9 and max at 16 writers are 674 and 1,210 µs against 604 to 947 µs.

Under agent load AtticDB has the best p50 and p99.9 of the 4 servers. Its p99 median trails Redis at 64 writers, and trails DiceDB and Valkey at 256 writers.

Where we lose

  • SQLite has a lower p50 in closed loop at every writer count on both disks.
  • SQLite runs in the writer's process with no socket. On NVMe with 1 writer SQLite gets 19,410 acks/s and a 32 µs p50 against AtticDB's 9,799 and 94 µs.
  • On Premium SSD v2 in closed loop, SQLite has a lower p99 and p99.9 at 4 and 16 writers.
  • On NVMe in closed loop, SQLite keeps a lower p50 and p99 at 4 and 16 writers.
  • On NVMe its p99.9 is lower at 16 writers, and its agent-load p50 is 57 and 68 µs.
  • On NVMe at 16 closed-loop writers, Redis and DiceDB beat AtticDB on p50, p99.9 and max latency.
  • On NVMe under agent load, Redis has a lower p99 at 64 writers, and DiceDB and Valkey at 256.

Raw data and runbook