DreamDB
← Home

Benchmarks

DreamDB vs LanceDB and Deep Lake (head-to-head), plus lakeFS (versioning, qualitative). We compare DreamDB to its actual category — versioned, multimodal, object-store-native data lakes with built-in retrieval — not pure vector servers (Qdrant/Milvus), which are a different category and would measure DreamDB's weakest axis.

Python 3.12 · single Apple-silicon machine · local-disk · cosine · k=10 · warm latency. SIFT1M (1M×128) + real CLIP-512 (openimages).

TL;DR. On its target data (high-dim embeddings) DreamDB's retrieval is competitive at every scale tested. At 1.74M, DreamDB is ~at parity with LanceDB (6.58 ms vs 5.56 ms @ recall 0.90), and uniquely reaches ≥0.99 where LanceDB's PQ plateaus, while Deep Lake collapses to a brute-force scan. On top of competitive latency, DreamDB's edge is the model: time-as-PK temporal + multimodal + CMAF video + retrieval breadth (ColBERT/SPLADE/hybrid) + serverless/in-browser reads. Honest cost: slower ingest (per-batch commits) and no high-QPS serving layer.

What makes DreamDB unique

On raw vector retrieval DreamDB is competitive but not categorically faster (below). Its real differentiation is the data model — capabilities none of the others offer together:

Time is the only key

Every record is anchored on a nanosecond timeline — temporal- and streaming-native. Episodes, sensor logs, and replay are first-class, not bolted on. LanceDB / Deep Lake / lakeFS have no such model.

Multimodal on one timeline

Video (CMAF, segmented + seekable), images, embeddings, scalars, and text time-aligned on a single timeline. Robotics / AV sensor-fusion fits natively — not as separate tables.

Every retrieval mode, one engine

Vector ANN + BM25 + SPLADE (learned-sparse) + ColBERT (late-interaction) + hybrid fusion. SPLADE and ColBERT are unique here — no other system in the set offers them.

Serverless, in-browser reads

Queries — including ANN — run client-side in the browser, directly against S3. No server, no backend. This very demo is the proof. None of the others read in-browser.

A protocol, not a library

Content-addressed + immutable, with git-style branch / merge / time-travel at the data-model level, over any S3-shape store — designed for interoperating implementations.

The wedge is the intersection. Each of these exists somewhere else in isolation — but versioned + temporal + multimodal + multi-modal retrieval + serverless, in one content-addressed store, is the combination only DreamDB offers. That's the case for embodied-AI / robotics episodic memory — not winning a single-axis race against a tuned vector server or an analytics warehouse.

Iso-recall — latency at equal recall (CLIP-512, 25k)

The fair comparison: tune each system's search effort to the same recall, then compare latency (lower-left of a curve is better). LanceDB uses nprobes+refine_factor; DreamDB uses its query-time nprobe knob; Deep Lake has no query knob (single point).

03691215180.850.900.951.000.95p50 latency (ms)recall@10fasterbetter ↘ lower3.3ms4.4ms6.1ms9.7ms1.67ms2.76ms4.63ms5.83ms12.07msfixed · no knobDreamDBLanceDBDeep Lake

At moderate recall LanceDB is a touch faster; at ~0.99 the two are neck-and-neck (LanceDB ~5.8 ms, DreamDB ~6–10 ms); DreamDB reaches marginally higher recall (0.997). Both are far below Deep Lake's fixed ~12 ms. At 25k all three are close — the separation sharpens at 1.7M (below).

At scale — 1.74M CLIP-512 (k=10)

25k is near-trivial; scale is where architectures separate. On the full 1.74M-vector openimages corpus, latency (p50) at each recall target. DreamDB is competitive with LanceDB and shown compacted (the operating state after a bulk load):

recall targetLanceDBDreamDBDeep Lake
≥ 0.905.56 ms6.58 ms
≥ 0.957.24 ms9.55 ms
≥ 0.99— (caps ≈0.95)27.6 ms

DreamDB recall 0.943 / 0.973 / 0.993 at np16 / np32 / np128. Deep Lake's binary path collapses to a brute-force scan at this size — recall 0.51 @ 1.74 s, failing every target. Storage ~3.6 GB all (DreamDB 4.2 GB with rerank; 7.9 GB transiently post-compact, pre-gc).

Read. At 1.74M, DreamDB is within ~1.2× of LanceDB at recall 0.90 and ~1.3× at 0.95, and is the only system to cleanly reach ≥0.99 (LanceDB's PQ plateaus ≈0.95; Deep Lake degrades to a linear scan). Latency scales gently with N (100k 2.9 ms → 800k 4.9 ms → 1.74M 6.58 ms at recall ≈0.94). A bulk load should be followed by compact() — lossless and recall-identical.

Compaction — bulk-load maintenance (1.74M)

A bulk ingest commits in batches, and each commit writes one bucket fragment per IVF cell — so a cell ends up split across ~80 fragments and every query pays to read them all. compact() (spec/0021) merges each cell's fragments back to one: read-online, lossless. Measured before/after on the 1.74M corpus (same dataset + queries; collapsed 96,872 fragments across 1,256 cells in 7.9 s):

nproberecall@10p50 uncompactedp50 compactedspeedup
160.94324.5 ms6.6 ms3.72×
320.97343.3 ms9.6 ms4.53×
640.98882.1 ms16.2 ms5.06×

Recall is bit-for-bit identical (lossless merge) — fragmentation is the dominant cost of a raw bulk load, so merging fragments back to one per cell is the key post-ingest step, and the compacted column is the operating state in the at-scale table above. Caveat: compaction is copy-on-write, so on-disk footprint temporarily ~doubles (4.2 → 7.9 GB) until a gc pass reclaims the old fragments — compact + gc is the full maintenance cycle.

Random access by key (point lookup)

The episodic-memory workload: fetch a record by its time anchor (not similarity search). DreamDB uses a primary-key (time-anchor) index; LanceDB a columnar take. p50 by corpus size:

NDreamDB (PK index)LanceDB
200k0.07 ms0.10 ms
800k0.07 ms0.10 ms
1.74M0.10 ms0.18 ms

Flat (O(log N), N-independent) — ~0.07–0.10 ms across the full 20k→1.74M range, on par with (or ahead of) a columnar take. The PK index (`build_anchor_index` → `get_by_anchor`: root → leaf → one ranged record GET) replaces the naive temporal scan, whose fan-out grew ~√N (5.5 ms @200k → 17 ms @800k → 35 ms @1.74M → seconds at 10B). A primary key now has a primary index.

Capability matrix

DreamDBLanceDBDeep LakelakeFS
~
~
~
~✓✓
~
~~
~
n/a
v0highhighhigh

✓ native · ~ partial · ✕ no. Click any capability for an explanation. Unique to DreamDB vs both LanceDB and Deep Lake: the top five rows.

CLIP-512 — DreamDB's target (25k, k=10)

systemrecall@10storagep50 latency
DreamDB (nprobe 64)0.99753.6 MB9.7 ms
LanceDB (refine)0.98952.9 MB5.8 ms
Deep Lake0.99451.3 MB12.1 ms

High-dim normalized embeddings — DreamDB's design point. All three reach ~0.99 recall; differences are latency + the tunable curve above.

SIFT1M — low-dim L2 (1M×128, k=10)

systemrecall@10storagep50 latency
LanceDB IVF_PQ0.535534 MB1.3 ms
Deep Lake binary0.425534 MB2.3 ms
DreamDB 1-bit0.214677 MB27 ms
DreamDB 4-bit0.803721 MB26 ms

Adversarial for a cosine + 1-bit design. 1-bit DreamDB is weak here (0.21); 4-bit reaches 0.80 — ahead of LanceDB (0.54) and Deep Lake (0.43) — trading ~1.35× storage and higher latency. SIFT was a config (bit-depth), not a fundamental loss.

Honest takeaways

  • Retrieval: competitive on embeddings once tuned; LanceDB usually a touch faster at equal recall, both beat Deep Lake on latency.
  • Competitive at scale: at 1.74M DreamDB is ~1.2× LanceDB at 0.90 recall (6.58 vs 5.56 ms), uniquely still reaches ≥0.99, and Deep Lake collapses to a brute-force scan. A bulk load wants a compact (+gc) pass — lossless and recall-identical.
  • Remaining costs: slower ingest (per-batch commits), a gc pass after compact, and no high-QPS serving layer (out of scope by design).
  • The wedge is the model: versioned + temporal + multimodal + multi-modal retrieval + serverless/in-browser — the intersection none of the others offer together.
  • Not a tabular analytics warehouse (LanceDB), a training-loader lake (Deep Lake), or an enterprise versioning layer (lakeFS).

Where you'd use DreamDB

What the model unlocks — tagged by honest maturity (what's proven vs. where it's heading).

Robotics & embodied-AI memory

Sensor streams — CMAF video, lidar, poses, embeddings — land on one timeline. Query "what did the robot see at time T?", replay an episode, or retrieve similar moments across runs. DreamDB's bullseye.

foundation ready

Serverless multimodal search / RAG

Semantic + hybrid search over images, video, and text with no backend — the browser runs ANN directly against object storage. Ship a search app over millions of items with just a bucket. (This demo is it.)

running in this demo

Forkable AI data layers

Keep one base media track; add CLIP, caption, SPLADE, or detection layers over it — branched and merged like code, without re-uploading the originals. Many teams enrich the same asset in parallel.

foundation ready

Versioned, reproducible datasets

Snapshot, branch, and time-travel a training set; re-encode to a new model's embeddings while old versions stay queryable. Reproduce exactly which data + which embedding version trained a model.

foundation ready

Agent / long-term memory

Every interaction time-anchored and embedded — a durable, cross-modal "external brain" an agent retrieves by time or similarity. The model is real today; low-latency at archive scale is the open work.

roadmap

Private, on-device retrieval

Search runs client-side; the store only ever holds content-addressed objects, so queries never leave the device. Client-side retrieval works today; an at-rest encryption layer is on the roadmap.

roadmap

If HTTP moved information and Git made code collaborative, the bet behind DreamDB is to make multimodal signals organizable + addressable the same way — versioned, time-aligned, infinitely-layerable signal layers instead of dead files. The foundation above is real today; the global, multi-tenant, encrypted, settle-per-query signal network is the north star (it needs federation, multi-tenancy, and an encryption layer — not yet built).